array-heap (数组堆)

这个 Swift 包提供了一个扩展,允许将 Comparable 元素的数组用作堆(包括最小堆和最大堆)。

该扩展使用数组本身作为存储,这意味着不需要额外的内存空间。

用法

空数组已经是有效的堆!因此,可以立即插入元素。

var heap = [Int]()
heap.minHeapInsert(2)
heap.heapTop // 2
heap.minHeapInsert(3)
heap.heapTop // 2
heap.minHeapInsert(1)
heap.heapTop // 1
heap.minHeapRemoveTop() // 1
heap.heapTop // 2

包含现有元素的数组可以在线性时间 O(n) 内转换为堆。

let items = Array(1...100)
var heap = items.maxHeapified()
heap.heapTop // 100
heap.minHeapify()
heap.heapTop // 1

复杂度

操作 时间复杂度 空间复杂度
top (堆顶元素) O(1) O(1)
removeTop (移除堆顶元素) O(log n) O(1)
insert (插入) O(log n) O(1)
O(log n) heapify/ied (堆化) O(1)