这个 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) |