알고리즘 개념
- 해당 순서에 원소를 넣을 위치는 이미 정해져 있고, 어떤 원소를 넣을지 선택하는 알고리즘
- 첫 번째 자리에는 첫 번째~마지막 원소 중 가장 작은 원소를, 두 번째 자리에는 두 번째~마지막 원소 중 가장 작은 원소를...
과정
- 주어진 배열에서 최솟값을 찾는다.
- 그 최솟값과 맨 앞에 위치한 값을 교체한다.(swap)
- 맨 앞에 위치한 값을 제외한 나머지 배열에 대해서 같은 방법으로 교체한다.
코드
for (int i = 0; i < n; i++){
int minIdx = i;
for (int j = i + 1; j < n; j++){
if (arr[j] < arr[minIdx])
minIdx = j;
}
int temp = arr[i];
arr[i] = arr[minIdx];
arr[minIdx] = temp;
}
장점
- 구현이 간단하고 단순하다.
단점
- 성능이 좋지 않다(O(n^2))
시간 복잡도
- (n-1) + (n-2) + .... + 2 + 1 => n(n-1)/2
- 최선, 평균, 최악 모두 O(n^2)
공간복잡도
- O(n)
- 별도의 메모리 공간이 필요하지 않은 제자리 정렬(in-place sorting)
정렬 알고리즘 시간 복잡도 정리
정렬 | 최선 | 평균 | 최악 |
선택정렬(Selection Sort) | O(n^2) | O(n^2) | O(n^2) |
거품정렬(Bubble Sort) | O(n^2) | O(n^2) | O(n^2) |
삽입정렬(Insertion Sort) | O(n) | O(n^2) | O(n^2) |
퀵정렬(Quick Sort) | O(nlogn) | O(nlogn) | O(n^2) |
병합정렬(Merge Sort) | O(nlogn) | O(nlogn) | O(nlogn) |
힙정렬(Heap Sort) | O(nlogn) | O(nlogn) | O(nlogn) |
728x90
'Algorithm > 개념정리' 카테고리의 다른 글
병합정렬(Merge Sort) C++ / 장단점 / 시간복잡도 / 공간복잡도 :: DANIDANI (5) | 2021.01.19 |
---|---|
퀵정렬(Quick Sort) C++ / 장단점 / 시간복잡도 / 공간복잡도 :: DANIDANI (1) | 2021.01.18 |
삽입정렬(Insertion Sort) C++ / 장단점 / 시간복잡도 / 공간복잡도 :: DANIDANI (0) | 2021.01.16 |
거품정렬(Bubble Sort) C++ / 장단점 / 시간복잡도 / 공간복잡도 :: DANIDANI (0) | 2021.01.15 |
투 포인터 알고리즘(Two Pointers Algorithm) :: DANIDANI (1) | 2020.05.19 |