堆排序主要包含兩個部分:堆建立和堆調整。
以下是最大堆**:
def max_heapify(heap,heapsize,root):
'''對乙個父節點及其左右孩子節點調整;heap:list;heapsize:做陣列最大限制,root:根節點位置
'''left = 2*root + 1 #注意此處下標從0開始,下標為1開始時,公式為left = 2*root
right = left + 1
large = root
if left堆排序的複雜度:因為建堆的時間複雜度是o(n),調整堆的時間複雜度是log n,所以堆排序的時間複雜度是o(nlog n)。
參考:
堆排序的python實現
如圖所示,堆類似於一棵二叉樹,每個節點最多有兩個子結點,根據堆的特點,又分為大頂堆和小頂堆。對於大頂堆,每個結點的值均大於其子結點的值,小頂推則恰恰相反,每個結點的值均小於其子結點的值。而對排序結構雖然類似於二叉樹,不過確是在列表結構上實現排序的,當結點 i 存在子結點時,其左子結點的索引必定為2i...
堆排序的python實現
def max heapify heap,heapsize,root left 2 root 1 right left 1 larger root if left heapsize and heap larger heap left larger left if right heapsize and...
Python實現堆排序
usr bin env python coding utf 8 堆排序 class heap object 求給定下標i的父節點下標 defparent self,i if i 2 0 return i 2 1 else return i 2 求給定下標i的左孩子下標 defleft self,i ...