Python實現堆排序
阿新 • • 發佈:2018-12-16
定義
堆排序(英語:Heapsort)是指利用堆這種資料結構所設計的一種排序演算法。堆是一個近似完全二叉樹的結構,並同時滿足堆積的性質:即子結點的鍵值或索引總是小於(或者大於)它的父節點。
堆節點的訪問
通常堆是通過一維陣列來實現的。在陣列起始位置為0的情形中:
父節點i的左子節點在位置 (2i+1); 父節點i的右子節點在位置 (2i+2); 子節點i的父節點在位置 floor((i-1)/2);
時間複雜度
實現
#Heap sort class HeapSort: def __init__(self, lst): assert type(lst) == list or type(lst) == tuple self.lst = list(lst) self.type = type(lst) def sort(self): n = len(self.lst) for start in range((n - 2) // 2, -1, -1): self.max_heapify(start, n - 1) for end in range(n - 1, 0, -1): self.lst[0], self.lst[end] = self.lst[end], self.lst[0] self.max_heapify(0, end - 1) return self.type(self.lst) def max_heapify(self,start,end): root = start while True: child = 2 *root + 1 if child > end: break if child + 1 <= end and self.lst[child] < self.lst[child + 1]: child += 1 if self.lst[root] < self.lst[child]: self.lst[root], self.lst[child] = self.lst[child], self.lst[root] root = child else: break
測試
#test
a = (9,8,3,6,5,4,2,7,1)
p = HeapSort(a)
print(p.sort())