배열 안에서 가장 작은 수(혹은 가장 큰 수)를 찾아 첫 번째 위치(혹은 가장 마지막 위치)의 수와 교환해주는 방식의 정렬
선택 정렬은 교환 횟수를 최소화하는 반면 각 자료를 비교하는 횟수는 증가한다.
Big-O : O(n^2)
Big-Ω : Ω(n^2)
(n-1)*(n-2) = n^2-3n+2
바깥 루프에서는 숫자들을 처음부터 순서대로 방문하고, 안쪽 루프에서는 가장 작은 값을 찾아야하므로 두 번의 루프를 돈다.
중복 데이터가 있는 경우 기존 중복 데이터 순서가 바뀔 수 있다.
function selectionSort (array) {
for(let i=0; i<array.length; i++){
let minIdx = i;
for(let j=i+1; j<array.length; j++){
if(array[minIdx]>array[j]){
minIdx = j;
}
}
if(minIdx !== i){
let swap = array[minIdx];
array[minIdx] = array[i];
array[i] = swap;
}
console.log(`${i}회전 : ${array}`)
}
return array;
}
console.log(selectionSort([5,7,3,4,1,6,2]));
맨 앞자리부터 정렬되는 것을 볼 수 있다.
참고자료
CS50
https://medium.com/@peterlin5301997/bubble-sort-5a66156c942e
https://im-developer.tistory.com/133