알고리즘 개요 및 소개
선택 정렬은 제자리 정렬 알고리즘의 하나로 다음과 같은 순서로 이루어진다.
1. 주어진 리스트 중에 최솟값을 찾는다.
2. 그 값을 맨 앞에 위치한 값과 교체한다
3. 맨 처음 위치를 뺀 나머지 리스트를 같은 방법으로 교체한다.
선택 정렬은 알고리즘이 단순하여 사용할 수 있는 메모리가 제한적인 경우에 성능의 이점이 있다.
선택 정렬은 대략 N*(N+1)/2번가량의 연산을 수행하기 때문에 시간 복잡도는 O(N^2)이다.
시간 복잡도 |
O(N^2) |
장점 | 메모리가 제한적인 경우에 성능의 이점이 있다. |
단점 | 느린 속도, 많은 연산량 |
소스코드
#include
constexpr int MAX_LIST = 10;
/*
Select Sort 알고리즘의 핵심은 가장 작은숫자를 선택해서 앞으로 보내자
*/
int main() {
int list[MAX_LIST] = { 10,1,3,2,8,5,9,4,6,7 };
int temp, index, min;
for (int i = 0; i < MAX_LIST; ++i) {
min = 0x0FFFFFFF;
for (int j = i; j < MAX_LIST; ++j) {
if (list[j] < min) {
min = list[j];
index = j;
}
}
temp = list[i];
list[i] = list[index];
list[index] = temp;
}
for (auto i : list) {
std::cout << i << " ";
}
system("pause");
}
후기
알고리즘의 기초라고 할 수 있는 정렬 중에 선택 정렬을 구현해보았다.
온라인 코딩문제를 풀어보면서 탐색 알고리즘 등 여러 알고리즘의 중요성을 깨달았기 때문에 당분간은 알고리즘 공부를 먼저 하고 온라인 코딩 문제를 푸는 방식으로 가야 할 거 같다.
출처 및 레퍼런스
Wiki: https://ko.wikipedia.org/wiki/선택_정렬
Blog: https://blog.naver.com/ndb796/221226800661
'자료구조 알고리즘 > 정렬 알고리즘(Sort)' 카테고리의 다른 글
[알고리즘] 병합 정렬(Merge Sort) (1) | 2020.01.10 |
---|---|
[알고리즘] 퀵 정렬(Quick Sort) (1) | 2020.01.02 |
[알고리즘] 삽입 정렬(揷入整列, insertion sort) (1) | 2019.12.30 |
[알고리즘] 버블 정렬(Bubble Sort) (1) | 2019.12.30 |