小顶堆
Hello World!
class MinHeap { constructor(compareFunc = (a, b) => a < b) { this.compare = compareFunc; this.heap = []; } get size() { return this.heap.length; } peek() { return this.heap[0]; } add(value) { this.heap.push(value); this.heapifyUp(); } poll() { if (this.size === 0) { return null; } if (this.size === 1) { return this.heap.pop(); } const max = this.heap[0]; this.heap[0] = this.heap.pop(); this.heapifyDown(); return max; } heapifyUp() { let currentIndex = this.size - 1; while (currentIndex > 0) { const parentIndex = Math.floor((currentIndex - 1) / 2); if (this.compare(this.heap[currentIndex], this.heap[parentIndex])) { [this.heap[currentIndex], this.heap[parentIndex]] = [this.heap[parentIndex], this.heap[currentIndex]]; currentIndex = parentIndex; } else { break; } } } heapifyDown() { let currentIndex = 0; while (currentIndex < this.size) { let largestIndex = currentIndex; const leftChildIndex = 2 * currentIndex + 1; const rightChildIndex = 2 * currentIndex + 2; if (leftChildIndex < this.size && this.compare(this.heap[leftChildIndex], this.heap[largestIndex])) { largestIndex = leftChildIndex; } if (rightChildIndex < this.size && this.compare(this.heap[rightChildIndex], this.heap[largestIndex])) { largestIndex = rightChildIndex; } if (largestIndex !== currentIndex) { [this.heap[currentIndex], this.heap[largestIndex]] = [this.heap[largestIndex], this.heap[currentIndex]]; currentIndex = largestIndex; } else { break; } } }}