본문 바로가기

알고리즘(Algorithm)/정렬(Sorting)

선택정렬(Selection Sort)

선택정렬(Selection Sort)은 심플한 정렬 알고리즘이다.

알고리즘이 어떤 식으로 동작하는지 살펴보자.

 

위와 같이 정렬되지 않은 데이터들이 있고 오름차순(ascending)으로 정렬하는 것을 가정하고 설명하겠다.
모든 데이터들을 순차적으로 비교하여 가장 최소값을 찾는다. (여기는 10이 가장 작은 값이다.)

위에서 찾은 가장 작은 값은 10이다. 10을 첫번째 위치에 있는 (index = 0) 인 14와 교체한다. 

맨 왼쪽의 10은 이미 데이터의 모든 원소들 중 가장 작은값이 선택(selection)되어 이동하였으므로 그 다음에는 10을 뺀 나머지 원소들 중 가장 작은 값을 찾는다. 

10을 뺀 나머지 원소들 중에서 가장 작은 값은 14이므로 14를 두번째 위치에 있는(index = 1) 인 33과 교체한다.

이제 10, 14를 뺀 나머지 원소들 중에서 가장 작은 값을 찾고 위에 수행한 절차를 반복하면 아래 그림처럼 정렬이 된다.

▲ [출처] https://www.tutorialspoint.com/data_structures_algorithms/selection_sort_algorithm.htm  

 

선택정렬은 알고리즘이 단순하나 성능은 평균 및 최악의 경우 둘다 O(N2) 이므로  대용량 데이터 셋에 사용하기에는 적합하지 않다.

 

구현 코드는 다음과 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
 
public class Main {
 
    public static void main(String[] args)  {
 
        int array[] = {1433271035194244};
        selectionSort(array);
 
        for (int i = 0 ;i < array.length ; i++){
            System.out.print(array[i] + " ");
        }
    }
 
    
    public static void selectionSort(int[] list) {
 
        for(int i  = 0 ; i < list.length -1 ; i++) {
 
            // 정렬된 요소를 제외한 나머지중 최소값을 찾는다.
            int min = i;
            for(int j = i + 1 ; j < list.length ; j++) {
                if(list[min] > list[j]) {
                    min = j ;
                }
            }
 
            swap(list, i, min);
        }
    }
 
    // 두 원소를 서로 swap(교환한다)
    private  static   void swap(int[] a, int i, int j) {
        int temp = a[i];
        a[i] = a[j];
        a[j] = temp;
    }
 
}
Colored by Color Scripter

'알고리즘(Algorithm) > 정렬(Sorting)' 카테고리의 다른 글

기수정렬((Radix Sort)  (0) 2019.06.19
힙정렬(Heap Sort)  (1) 2019.06.19
합병정렬(Merge Sort)  (0) 2019.06.19
삽입정렬(Insertion Sort)  (0) 2019.06.19
버블(거품)정렬(Bubble Sort)  (0) 2019.06.19