선택 정렬(Selection Sort)이란?
가장 작은 값을 찾아 앞으로 차례로 옮기는 방식이다.
예)
1) 배열의 첫번째 값을 min값으로 설정한다.

2) 두번째 값부터 마지막 값까지 비교하여, min보다 작은 값이면 그 값을 min값으로 설정한다.

3) min값을 가장 첫번째 값과 교체한다.

4) 배열의 두번째 값을 min값으로 설정한다.

5) 세번째 값부터 마지막 값까지 비교하여, min보다 작은 값이면 그 값을 min값으로 설정한다.

6) 두번째 값과 min값을 교체한다.

이 작업을 반복하게 되면 작은 값부터 차례로 정렬이 된다.
소스코드
#include <iostream>
using namespace std;
void selectionSort(int* arr, int len);
int main() {
int N;
cin >> N;
int* arr = new int[N];
for (int i = 0; i < N; i++) {
cin >> arr[i];
}
selectionSort(arr, N);
for (int i = 0; i < N; i++) {
cout << arr[i] << endl;
}
delete[] arr;
return 0;
}
void selectionSort(int* arr, int len) {
for (int i = 0; i < len; i++) {
int min = arr[i];
int min_idx = i;
for (int j = i + 1; j < len; j++) {
if (arr[j] < min) {
min = arr[j];
min_idx = j;
}
}
int temp = arr[i];
arr[i] = min;
arr[min_idx] = temp;
}
}
시간복잡도
평균의 경우 : O(n2)
최선의 경우 : O(n2)
최악의 경우 : O(n2)
거품 정렬과 마찬가지로, 데이터 정렬 여부와 상관없이 비교 횟수가 동일하다.
데이터 총 개수가 n개라고 하면, 비교 횟수는 아래와 같다.
(n-1) + (n-2) + ... + 2 + 1
= n(n-1) / 2
= O(n2)
'Algorithm > 개념' 카테고리의 다른 글
| [Algorithm] 정렬 - 빠른 정렬 (Quick Sort) (0) | 2019.05.26 |
|---|---|
| [Algorithm] 정렬 - 합병 정렬 (Merge Sort) (0) | 2019.05.24 |
| [Algorithm] 정렬 - 거품 정렬 (Bubble Sort) (0) | 2019.05.23 |
| [Algorithm] 정렬 - 삽입 정렬 (Insertion Sort) (0) | 2019.05.23 |
| [Algorithm] 유클리드 호제법 (0) | 2019.05.22 |