Chapter 32: Heap Sort
Last updated
Last updated
extension Heap {
func sorted() -> [Element] {
// 建立一個heap
var heap = Heap(sort: sort, elements: elements)
// 從heap末端開始處理 ex. 10, 9, 8....
// O(n): traverse the whole list once
for index in heap.elements.indices.reversed() {
// 把第一個也是root, 也是heap中最大的元素,搬到最末端
heap.elements.swapAt(0, index)
// 把剛剛交換到index = 0的元素放到正確位置
// O(log n): siftDown
heap.siftDown(from: 0, upTo: index)
}
return heap.elements
}
}