- 데이터 중 가장 크거나 작은 데이터를 찾아 알맞은 위치로 옮기면서 반복하는 정렬 방법
- 구현은 간단하지만, 버블 정렬과 비슷하게 대용량 데이터 측면에선 비효율적
- 시간 복잡도 : 최선 또는 평균 또는 최악 O(n²), 매번 전체를 순회하여 최소값을 찾기 때문에 이미 정렬되었어도 항상 O(n²)
- 공간 복잡도 : O(1)
- 불안정 정렬 : 최소값을 멀리 떨어진 원소와 교환하므로 같은 값의 기존 순서가 뒤집힐 수 있음
- 비교는 항상 O(n²)이지만 교환은 최대 n-1번뿐이라, 쓰기 비용이 비싼 환경에서나 의미가 있음
fun selectionSort(arr: IntArray) {
val n = arr.size
for (i in 0 until n) {
var minIdx = i
// 일단 최소값 인덱스 서치
for (j in i + 1 until n) {
if (arr[j] < arr[minIdx]) {
minIdx = j
}
}
// 최소값이 나온다면 swap
if (arr[i] > arr[minIdx]) {
val temp = arr[i]
arr[i] = arr[minIdx]
arr[minIdx] = temp
}
}
}