Selection Sort는 해당 순서에 원소를 넣을 위치는 이미 정해져 있고, 어떤 원소를 넣을지 선택하는 알고리즘
이다.
- 주어진 배열 중에 최소값을 찾는다.
- 그 값을 맨 앞에 위치한 값과 교체한다.
- 맨 처음 위치를 제외한 나머지 배열을 같은 방법으로 교체한다.
#include <iostream>
#include <vector>
using namespace std;
void SelectionSort(vector<int> arr){
int indexMin, temp = 0;
for(int i=0; i<arr.size()-1; i++){ // 1
indexMin = i;
for (int j=i+1; j<arr.size(); j++){ // 2
if(arr[j] < arr[indexMin]){ // 3
indexMin = j;
}
}
swap(arr[indexMin], arr[i]); // 4
}
}
- 범위에서 가장 작은 값이 들어갈 위치를 선택한다.
- i+1번째 인덱스에서부터 끝까지 값을 확인한다.
- 범위에서 가장 작은 값을 찾아서 인덱스를 indexMin에 저장한다.
- indexMin 위치의 값과 가장 작은 값이 들어갈 위치의 값을 교환한다.
(n-1) + (n-2) + (n-3) + ... + 2 + 1 ➡ n(n-1)/2
이므로 시간복잡도는 O(n^2).
정렬 여부에 상관없이 비교를 하기 때문에 최선, 평균, 최악의 경우 모두 O(n^2).
주어진 배열 안에서 교환을 통해 정렬이 수행되므로 O(n).