키 값을 선택하여 값을 이동한다.
오름차순으로 정렬시 제일 먼저 제일 작은 값이 와야하므로 데이터 내에서 가장 작은 키 값을 선택하여 제일 앞으로 보낸다.
나머지 데이터에서 가장 작은 값을 찾아서 이미 정렬된 키 값 다음 위치로 보낸다.
반복하여 제일 마지막 키 값이 남을 때까지 작은 키 값을 찾아 이미 정렬된 키 값 다음 위치로 보내는 동작을 반복한다.
마지막 키 값은 정렬되지 않아도 위치가 확정이므로 정렬이 끝난다.
비교 연산 : 두 개의 루프. 1. n개 만큼 비교 시작. 2. n-1개와 비교. 즉 비교에 n(2) 만큼의 효율.
이동 연산 : 두 값의 위치 변경. temp 변수 포함 3번의 이동 연산. 즉 이동에 3n = n 만큼의 효율.
최종 n(2)+n 이므로 O(n(2))의 효율을 지닌다.
상대적으로 느린 알고리즘.
이동 연산 자체는 n의 효율이므로 이동해야하는 데이터가 큰 경우 유리하다.
데이터가 이동이 계속 되므로 불안정성 정렬이다.
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 | // 선택 정렬 함수 void SelectionSort(int data[], int cnt) { int minIndex = 0, temp = 0; int i = 0, j = 0; // 첫번째 루프 : n-1만큼 비교 for (i = 0; i < cnt - 1; i++) { minIndex = i; // 두번째 루프 : n개만큼 비교 for (j = i + 1; j < cnt; j++) { if (data[j] < data[minIndex]) { minIndex = j; } } // 이동 연산 : 3n if (minIndex != i) { temp = data[i]; data[i] = data[minIndex]; data[minIndex] = temp; } } } | cs |
'Development > Algorithm' 카테고리의 다른 글
퀵정렬 (QuickSort) (0) | 2018.12.19 |
---|---|
알고리즘 (algorithm) (0) | 2018.12.19 |