반응형
가장 작은 요소부터 선택해 알맞은 위치로 옮겨서 순서대로 정렬하는 알고리즘
배열 a에서
아직 정렬하지 않은 부분에서 가장 작은 키의 값 a[min]을 선택한다.
a[min]과 아직 정렬하지 않은 부분의 첫 번째 요소를 교환한다.
이 과정을 n - 1회 반복한다.
#define swap(type, x, y) do { type t = x; x = y; y = t; } while(0)
// 단순 선택 정렬
void selection(int a[], int n) {
int i, j;
for(i = 0; i < n - 1; i++) {
int min = i;
for(j = i + 1; j < n; j++) {
if(a[j] < a[min])
min = j;
}
swap(int, a[i], a[min]); // 이렇게 하면 min == i 일 경우에도 실행은 되나 결과는 같음 (오히려 두 값이 다를 때에만 적용하게 비교하는 구문을 삽입하는게 전체 프로그램의 효율을 떨어뜨릴 수도 있음)
}
}
서로 떨어져 있는 요소를 교환하기 때문에 알고리즘이 안정적이지 않다. ( 값이 같은 요소가 중복해 있을 때 정렬 전/후의 순서가 뒤바뀔 수 있다)
시간복잡도 : O(n^2)
반응형
'[알고리즘 + 자료구조]' 카테고리의 다른 글
[알고리즘] 셸 정렬 (Shell Sort) (2) | 2020.11.27 |
---|---|
[알고리즘] 단순 삽입 정렬 (Straight Insertion Sort) (0) | 2020.11.09 |
[알고리즘] 버블 정렬/Bubble Sort - 2 (+ 양방향 버블 정렬) (0) | 2020.11.09 |
[알고리즘] Do it 자료구조와 알고리즘 6장 정리 1/2 (0) | 2020.11.06 |
[알고리즘] 8퀸 문제 (0) | 2020.11.04 |