728x90
1. 선택정렬
선택정렬은 정렬 알고리즘 중 하나로, 내부 비교 정렬이다.
가장 앞의 값을 기준으로 배열 내에서 최소값을 찾고, 해당 값을 가장 앞의 값과 교환한다.
이를 반복하면서 배열을 정렬하는게 선택정렬이다.
O(n^2)의 시간복잡도를 갖기 때문에 성능이 떨어지지만 메모리가 절약된다는 장점이 있다.
또한 데이터가 중복된 경우에도 위치가 바뀔 수 있는 Unstable 정렬이다.
따라서 데이터가 큰 경우보다, 메모리가 제한되는 경우에 사용하는 것이 좋다.
2. 선택정렬 구현
function solution(arr) {
let answer = arr;
for (let i = 0; i < arr.length; i++) {
let idx = i;
for (let j = i + 1; j < arr.length; j++) {
if (arr[j] < arr[idx]) idx = j;
}
[arr[i], arr[idx]] = [arr[idx], arr[i]];
}
return answer;
}
let arr = [13, 5, 11, 7, 23, 15];
console.log(solution(arr));
자바스크립트로 선택정렬을 구현하는 방법을 알아보자.
선택정렬은 최소값을 찾아 첫 번째 값과 교환하는 알고리즘이라는걸 생각하면 구현하기 어렵지 않다.
for (let i = 0; i < arr.length; i++) { ... }
우선 요소를 처음부터 끝까지 비교해야 하기 때문에 for문을 사용해준다.
let idx = i;
for (let j = i + 1; j < arr.length; j++) {
if (arr[j] < arr[idx]) idx = j;
}
최소값의 index를 저장할 idx를 만들어주고, for문을 한 번 더 사용해준다.
이제 i의 다음 요소(=j)와 최소값을 비교해서 가장 작은 값의 인덱스를 idx에 넣어준다.
값이 아니라 인덱스를 넣어주는 이유는, 해당 값과 첫 번째 값을 교환해야 하기 때문이다.
인덱스 번호를 알아야 교환이 가능하다.
[arr[i], arr[idx]] = [arr[idx], arr[i]];
그 후 첫 번째 값(arr[i])과 최소값(arr[idx])을 교환해준다.
위 교환 방식은 구조분해할당을 이용한 것이다.
(arr[i]에 arr[idx]를, arr[idx]에 arr[i]를 할당)
*구조분해할당
구조분해할당은 배열이나 객체의 속성을 해제하여 그 값을 개별 변수에 담을 수 있게 하는 것을 말한다.
let arr = ["Bora", "Lee"]
let [firstName, surname] = arr
//firstName : Bora
//surname : Lee
* 참고
728x90
반응형
'Algorithm > 개념' 카테고리의 다른 글
[Algorithm] 삽입정렬 알고리즘 (Insertion Sort Algorithm) (1) | 2024.01.11 |
---|---|
[Algorithm] 버블정렬 알고리즘(Bubble Sort Algorithm) (0) | 2024.01.10 |
[Algorithm] 큐(Queue) 자료구조 (1) | 2024.01.06 |
[Algorithm] 스택(Stack) 자료구조 (4) | 2024.01.04 |
[Algorithm] 알고리즘과 자료구조 차이점 (0) | 2023.12.27 |