미니 힙 정렬 (Mini Heap Sort) 구현 방법 in JavaScript
정렬 알고리즘의 이해
힙 정렬(Heap Sort)은 컴퓨터 과학에서 중요하게 다루는 정렬 알고리즘 중 하나입니다. 미니 힙 정렬은 힙 정렬의 변형 버전으로 볼 수 있습니다. 알고리즘(Algorithm)이란 문제를 해결하기 위한 단계별 방법을 의미합니다.
힙 정렬과 미니 힙 정렬의 차이
힙 정렬은 완전 이진 트리 구조를 사용하여 정렬을 수행하는 반면, 미니 힙 정렬은 일반적으로 부분적으로 정렬된 데이터에 대해 더 효율적으로 작동합니다. 완전 이진 트리(Complete Binary Tree)는 모든 레벨이 꽉 찬 이진 트리를 말합니다.
JavaScript에서의 구현
JavaScript에서 미니 힙 정렬을 구현하기 위해서는 다음과 같은 주요 함수가 필요합니다:
heapify
: 배열을 힙 구조로 만드는 함수buildHeap
: 초기 힙을 구성하는 함수heapSort
: 힙을 이용해서 배열을 정렬하는 함수
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);
}
}
buildHeap
함수
1
2
3
4
5
function buildHeap(arr, n) {
for (let i = Math.floor(n / 2) - 1; i >= 0; i--) {
heapify(arr, n, i);
}
}
heapSort
함수
1
2
3
4
5
6
7
8
9
function heapSort(arr) {
const n = arr.length;
buildHeap(arr, n);
for (let i = n - 1; i > 0; i--) {
[arr[0], arr[i]] = [arr[i], arr[0]];
heapify(arr, i, 0);
}
}
이러한 함수들을 이용하면, 미니 힙 정렬을 JavaScript로 구현할 수 있습니다. 이 코드를 이해하고 활용하면 더 효율적인 데이터 정렬이 가능해집니다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.