Computer Science/자료구조
Javascript - 최소힙 구현하기
somm12
2024. 5. 22. 10:49
class MinHeap {
constructor() {
this.heap = [];
}
size() {
return this.heap.length;
}
swap(idx1, idx2) {
[this.heap[idx1], this.heap[idx2]] = [this.heap[idx2], this.heap[idx1]];
}
add(value) {// 값 추가
this.heap.push(value);
this.bubbleUp();
}
remove() {// Pop
if (this.heap.length === 1) {
return this.heap.pop();
}
const value = this.heap[0];
this.heap[0] = this.heap.pop();
this.bubbleDown();
return value;
}
bubbleUp() {
let index = this.heap.length - 1;
let parentIdx = Math.floor((index - 1) / 2);
while (
this.heap[parentIdx] &&
this.heap[index] < this.heap[parentIdx]
) {
this.swap(index, parentIdx);
index = parentIdx;
parentIdx = Math.floor((index - 1) / 2);
}
}
bubbleDown() {
let index = 0;
let leftIdx = index * 2 + 1;
let rightIdx = index * 2 + 2;
while (
(this.heap[leftIdx] && this.heap[leftIdx] < this.heap[index]) ||
(this.heap[rightIdx] && this.heap[rightIdx] < this.heap[index])
) {
let smallerIdx = leftIdx;
if (
this.heap[rightIdx] &&
this.heap[rightIdx] < this.heap[smallerIdx]
) {
smallerIdx = rightIdx;
}
this.swap(index, smallerIdx);
index = smallerIdx;
leftIdx = index * 2 + 1;
rightIdx = index * 2 + 2;
}
}
}