Algorithm
[Udemy] 선택 정렬(Selection Sort)이란?
Wix
2024. 7. 26. 10:43
정의
요소를 비교하여 최솟값을 앞쪽으로 이동시켜 정렬하는 방법으로, 시간 복잡도는 O(n^2)이다.
외부 반복문 1회당 swap이 1회 발생하는 특징이 있다.
코드
function selectionSort(arr) {
function swap(arr, idx1, idx2) {
[arr[idx1], arr[idx2]] = [arr[idx2], arr[idx1]]
}
for (let i = 0; i < arr.length - 1; i++) {
let min = i
for (let j = i+1; j < arr.length; j++) {
if (arr[min] > arr[j]) {
min = j
}
}
swap(arr,i,min)
}
return arr;
}
swap 함수를 따로 추출해서 사용했다.
외부 반복문 변수 i를 선언하고 마지막 요소 이전까지 순회한다.
i는 최소값 인덱스와 값을 swap 시킬 것이다.
중첩 반복문 j는 i 이후 요소부터 순회하면서
i 위치의 요소보다 더 작은 값이 등장할 때, 최솟값 인덱스(min)을 수정한다.
중첩 반복문이 끝나면 최솟값 인덱스와 i를 swap 한다.
최적화 코드
만약 i 요소가 이미 최솟값이라면 어떨까?
input: [0, 2, 10, 5, 3, 6]
i와 min 값을 콘솔에 출력해보자.
i와 min 값이 동일할 때에는 굳이 swap을 해줄 필요가 없다.
해당 로직을 코드에 추가하자.
function selectionSort(arr) {
function swap(arr, idx1, idx2) {
[arr[idx1], arr[idx2]] = [arr[idx2], arr[idx1]]
}
for (let i = 0; i < arr.length - 1; i++) {
let min = i
for (let j = i+1; j < arr.length; j++) {
if (arr[min] > arr[j]) {
min = j
}
}
if (i !== min) {
swap(arr,i,min)
}
}
return arr;
}