본문 바로가기
자료구조/알고리즘

[Java 정렬] Bubble Sort(버블 정렬), Insertion Sort(삽입 정렬), Selection Sort(선택 정렬)

by devnyang 2024. 2. 19.
반응형

정렬?


정렬은 특정 값을 기준으로 순서대로 데이터를 배치하는 방법을 말한다.

구현 난이도가 쉽고 속도가 느린 정렬로는 버블정렬, 삽입정렬, 선택정렬.
 구현 난이도가 좀 더 어렵고 속도가 빠른 정렬로는 합병 정렬, 힙 정렬, 퀵 정렬, 트리 정렬.
 하이브리드 정렬로는 팀 정렬, 블록 병합 정렬, 인트로 정렬.
 기타 정렬 알고리즘으로는 기수 정렬, 카운팅 정렬, 셸 정렬, 보고 정렬 등이 있다.

 

 

Bubble Sort(버블 정렬)


인접한 데이터를 비교하여 자리를 바꾸는 방식으로 알고리즘 복잡도는 O(n제곱) 이다.

 

버블 정렬1
버블정렬2

 

 

 for (int i = 1; i < arr.length - 1; i++) { 
            for (int j = 0; j < arr.length - i; j++) {
                if(arr[j] > arr[j + 1]) {
                    int tmp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = tmp;
                }
            }

        }
     for (int i = arr.length - 1; i > 0; i--) {
            for (int j = 0; j < i; j++) {
                if(arr[j] > arr[ j+1]) {
                    int tmp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = tmp;
                }
            }

        }

 

이런 식으로 사용이 가능하다.

 

 

Insertion Sort(삽입 정렬)


앞의 데이터를 정렬해가면서 삽입 위치를 찾아 정렬하는 방식으로, 알고리즘 복잡도는 O(n제곱)이다.

 

삽입정렬

 for (int i = 1; i < arr.length; i++) {
            for (int j = i; j > 0; j--) {
                if(arr[j] < arr[j-1]) {
                    int tmp = arr[j];
                    arr[j] = arr[j - 1];
                    arr[j - 1] = tmp;
                }else{  //앞의 데이터들이 이미 정렬이 되있어서 비교할 필요가 없음.
                    break;
                }
            }
        }

 

 

 

Selection Sort(선택 정렬)


최소 또는 최대 값을 찾아서 가장 앞 또는 뒤부터 정렬하는 방식으로, 알고리즘 복잡도는 O(n제곱)이다.

 

선택정렬

      //최소값
        for (int i = 0; i < arr.length-1; i++) {  
            int min = i;
            for (int j = i+1; j < arr.length; j++) {
                if(arr[j] < arr[min]) {
                    min = j;
                }
            }
            int tmp = arr[i];
            arr[i] = arr[min];
            arr[min] = tmp;
        }

        //최대값
        for (int i = arr.length -1; i >0 ; i--) {
            int max = i;
            for (int j = i-1; j >=0; j--) {
                if(arr[j] > arr[max]) {
                   max = j;
                }
            }
            int tmp = arr[i];
            arr[i] = arr[max];
            arr[max] = tmp;
        }
반응형