思路:
構建好乙個最大堆
根結點是最大的數,根結點和最後乙個結點交換位置,然後對除了【0,n-1】個結點構造最大堆
根結點和第n-2個結點交換位置,然後對除了【0,n-2】個結點構造最大堆…
**:
def heap(data,root):
if 2*root+1data[2*root+1]:
k=2*root+2
else:
k=2*root+1
if data[k]>data[root]:
data[root],data[k]=data[k],data[root]
heap(data,k)
def max_heap(data):
for i in range(len(data)//2-1,-1,-1):
heap(data,i)
return data
def heap_sort(data):
data=max_heap(data)
print(data)
li=for i in range(len(data)-1,-1,-1):
if i>0:
data[0],data[i]=data[i],data[0]
data=max_heap(data[:i])
print(data,'---------')
print(li)
if __name__ == '__main__':
data=[1,5,6,3,4,8,2,9,7]
heap_sort(data)
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 ...
堆排序python實現
因為部門頻繁調整,半年多時間直接上級換了三個,之前一起工作的同事被調離的時候大頭沒有放我過去,說還有業務讓我支撐,在這次調整大頭也被調走了,現在小團隊的業務已經不再重要,人也都是一些老弱病殘,並且技術路線也與部門大團隊完全不同,因此,最近想換乙個公司或者部門來尋找更好的發展。當我前幾天到公司另乙個部...
python 實現堆排序
原理 迴圈陣列,依次構建最大堆,構建完以後第乙個元素就為最大值 swap 到最後乙個位置,繼續對 陣列中 0 last 1 這個新陣列構建最大堆 依次類推 到最後構建完成 arr 55,67,89,12,4,6,2,34,33,12 arrlen int len arr 調整三個元素堆 defadj...