728x90
반응형
선택 정렬은 다음과 같은 단계를 따른다.
1. 배열의 각 셀을 왼쪽부터 오른쪽 방향으로 확인하면서 어떤 값이 최솟값인지 결정한다. 한 셀씩 이동하면서 현재까지 가장 작은 값을 변수에 저장한다. 변수에 들어 있는 값보다 작은 값이 들어 있는 셀을 만나면 변수가 새 인덱스를 가리키도록 값을 대체한다.
2. 이제 최솟값이 어느 인덱스에 들어 있는지 알았으므로 그 인덱스의 값과 패스스루를 처음 시작했을 때의 값을 교환한다. 패스스루를 시작했을 때 인덱스는 첫 패스스루에서 인덱스 0일 것이고, 두 번째 패스스루에서는 인덱스 1일 것이다.
3. 데이터가 모두 정렬될 때까지 1, 2단계를 반복한다.
#include <vector>
using namespace std;
void selectionSort(vector<int>& array)
{
for (int i = 0; i < (int)array.size(); i++)
{
int minValIndex = i;
for (int j = i + 1; j < (int)array.size(); j++)
{
if (array[j] < array[minValIndex])
minValIndex = j;
}
if (minValIndex != i)
{
int temp = array[i];
array[i] = array[minValIndex];
array[minValIndex] = temp;
}
}
}
int main()
{
vector<int> vArr = { 2, 6, 1, 3 };
selectionSort(vArr);
for (int i = 0; i < (int)vArr.size(); i++)
cout << vArr[i] << endl;
return 0;
}
선택 정렬은 비교와 교환, 두 종류의 단계를 포함한다. 즉, 각 패스스루 내에서 각 원소를 현재까지 찾은 최솟값과 비교하고, 최솟값을 올바른 위치에 있는 수와 교환한다. 5개의 원소를 포함하는 배열을 예로 들면 총 10번의 비교를 해야 했다.
이와 달리 교환은 한 패스스루 당 최대 한 번 일어난다. 배열이 역순으로 정렬된 최악의 시나리오에서는 버블 정렬과 달리 비교할 때마다 빠짐없이 교환을 한 번 해야 한다. 선택 정렬은 분명 버블 정렬보다 단계 수가 반 정도 적다. 즉, 선택 정렬이 두 배 더 빠르다.
728x90
반응형
'소프트웨어 공부 > 자료구조' 카테고리의 다른 글
[자료구조] 해시 테이블(hash table) (0) | 2021.12.23 |
---|---|
[자료구조] 삽입 정렬 (insertion sort) (0) | 2021.12.23 |
[자료구조] 간단한 이차문제 선형으로 해결하기 (속도향상의 간단 예) (0) | 2021.11.05 |
[자료구조] 버블 정렬 (0) | 2021.11.05 |
[자료구조] 빅 오 표기법 (0) | 2021.10.14 |