ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 선택정렬, 삽입정렬, 버블정렬 (1/21)
    DataStructure & Algorithm 2022. 1. 29. 21:59

    기본 정렬 알고리즘

    1/ 선택정렬: 최솟값을 찾아 교환

    private static void selection_sort(int[] a, int size) {
    	for(int i=0; i<size-1; i++) {
    		int min_index = i;
    		
    		//최솟값을 갖고있는 인덱스 찾기
    		for(int j = i+1; j<size; j++) {
    			if(a[j] < a[min_index]) {
    				min_index = j;
    			}
    		}
    		// i번째 값과 최솟값을 서로 교환
    		int tmp = a[i];
    		a[i] = a[min_index];
    		a[min_index] = tmp;
    	}
    }

     

    2/ 버블정렬:

    바로 옆의 element와 비교해서 정렬.

    public void bubbleSort(int[] numbers) {
    		
    	//자기 옆의 원소와 비교하는 코드 작성
    	for(int k=0;k<numbers.length;k++) {
    		boolean flag = false; //비교문 안에 들어갔니? 정렬이 다 끝났으면 종료
    		for(int i=0;i<numbers.length-1;i++) {
    			if(numbers[i]>numbers[i+1]) {
    				int temp = numbers[i];
    				numbers[i] = numbers[i+1];
    				numbers[i+1] = temp;
    				flag = true;
    			}	
    		}
    		if(!flag) {
    			break;
    		}
    		System.out.println(Arrays.toString(numbers));
    	}
    }

     

    3/ 삽입정렬:

    최솟값을 찾은 다음, 최솟값이 있던 자리에 그 앞의 값을 그 자리에 넣고, 한 칸씩 밀려서 넣은 다음, 기준 값 자리에 최솟값을 넣음.

    public void insertSort(int[] numbers) {
    	for(int i=0;i<numbers.length-1;i++) {		//처음 숫자부터 시작. 마지막에서 그 전 숫자까지 비교
    		for(int j=i+1;j<numbers.length;j++){	//비교 숫자 결정. 두 번째 숫자부터 마지막 숫자까지
    			if(numbers[i]>numbers[j]) {			//두 개 숫자 비교. 앞의 숫자가 더 크면 바꿀 준비
    				int temp = numbers[j];			//작은 숫자를 temp에 저장
    				for(int k=j;k>i;k--) {			//큰 숫자 바로 뒤까지 숫자 밀도록
    					numbers[k] = numbers[k-1];	//작은 숫자의 자리에 그 앞에 있는 숫자를 넣음. 그래서 한 칸씩 밀리게.
    				}
    				numbers[i] = temp;				//작은 숫자를 i 자리에 삽입
    				System.out.println(Arrays.toString(numbers));	//새로운 배열 출력
    			}
    		}
    	}
    }

    'DataStructure & Algorithm' 카테고리의 다른 글

    이진트리 (1/27)  (0) 2022.02.05
    LinkedList, 재귀알고리즘, 퀵정렬(1/26)  (0) 2022.01.30
    Stack, Queue(1/25)  (0) 2022.01.30
Designed by Tistory.