📌선택 정렬 : 가장 작은 값을 '선택'하여 정렬하는 알고리즘
- 오름차순 기준 정렬
- 해당 순서에 원소를 넣을 위치는 이미 정해짐, 어떤 원소를 넣을지 선택
1. 첫 번째 순서에는 가장 작은 원소를 선택, 첫 번째 idx에 넣는다.
2. 두 번째 순서에는 남은 값중 가장 작은 원소를 선택, 두 번째 idx에 넣는다.
- 상세 과정
1. 첫 번째 인덱스를 기준으로 주어진 배열의 모든 원소를 비교하여 최솟값을 찾는다.
- 최솟 값을 첫 번째 값과 교체.
- 두 번째 인덱스 ~ 나머지 값을 같은 방법으로 교체.
- 하나의 원소가 남을 때까지 1-3 과정을 반복한다.(마지막 원소 자동 정렬)
#include<iostream>
#include<vector>
void selectionSort(vector<int> &v){ #vector의 주소를 매개변수로 넘겨 받아야 원본이 변경됨
for(int i=0; i<v.size()-1; i++){ #마지막 원소는 자동 정렬이므로 vector의 크기 -1
int key = i;
for(int j = i+1; j<v.size(); j++){
if(v[j]<v[key]){
key = j;
}
if( i != key){ #자기자신이 최솟값이면 교체X
swap(v[i], v[key])
}
}
}
}
- 비교 횟수
- 두 개의 for 문 실행
외부 for문 : (n-1)번
내부 for문 : n-1, n-2,..., 2, 1번
- 교체 횟수
- 외부 루프의 실행 횟수와 같다.
- 한 번 교체하기 위하여 3번의 이동(swap)이 필요하므로 3(n-1)번
- T(n) = (n-1) + (n-2) + … + 2 + 1 = n(n-1)/2 = O(n^2)