힙 정렬(Heap Sort)의 미니 구현 방법 자바스크립트
개요
힙 정렬은 컴퓨터 과학에서 중요한 정렬 알고리즘 중 하나입니다. 자바스크립트로 이를 간단하게 구현할 수 있는 방법을 설명하겠습니다. 본 문서는 특히 자바스크립트로 ‘미니 힙 정렬’을 구현하는 데 초점을 맞추고 있습니다.
힙 정렬이란?
힙 정렬은 이진 힙(binary heap) 자료구조를 사용하여 배열을 정렬하는 알고리즘입니다. ‘이진 힙’이란 부모 노드와 그에 속한 자식 노드간의 관계를 통해 배열된 트리구조를 말합니다.
코드의 에러: ‘ReferenceError’
문제의 코드에서 ReferenceError
라는 에러가 발생하는 경우가 있습니다. 이 에러는 변수나 함수를 정의하지 않았지만 사용하려고 할 때 일어납니다.
미니 힙 정렬 구현하기
1단계: 힙 생성
배열을 이진 힙으로 변환하려면 ‘힙화(Heapify)’라는 과정을 거쳐야 합니다. 힙화는 주어진 배열에서 가장 큰(또는 가장 작은) 요소를 힙의 루트로 만들고, 나머지 요소들도 힙의 조건에 맞게 재배열하는 작업입니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function heapify(arr, n, i) {
let largest = i;
let left = 2 * i + 1;
let right = 2 * i + 2;
if (left < n && arr[left] > arr[largest]) {
largest = left;
}
if (right < n && arr[right] > arr[largest]) {
largest = right;
}
if (largest !== i) {
[arr[i], arr[largest]] = [arr[largest], arr[i]];
heapify(arr, n, largest);
}
}
2단계: 힙 정렬 실행
힙을 생성한 후, 배열의 마지막 요소와 힙의 루트를 교환하고 힙 크기를 줄입니다. 이 과정을 반복하면 배열이 정렬됩니다.
1
2
3
4
5
6
7
8
9
10
11
12
function heapSort(arr) {
let n = arr.length;
for (let i = Math.floor(n / 2) - 1; i >= 0; i--) {
heapify(arr, n, i);
}
for (let i = n - 1; i >= 0; i--) {
[arr[0], arr[i]] = [arr[i], arr[0]];
heapify(arr, i, 0);
}
}
결론
자바스크립트를 사용하여 힙 정렬을 구현하는 것은 복잡하지 않습니다. 힙화와 배열 요소의 교환만 잘 이해한다면, 간단한 코드로 효율적인 정렬이 가능합니다. 이 기법은 다양한 데이터 정렬에 활용될 수 있으므로 알고 있으면 매우 유용합니다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.