python實現堆排序

2021-09-19 05:16:18 字數 809 閱讀 6316

思路:

構建好乙個最大堆

根結點是最大的數,根結點和最後乙個結點交換位置,然後對除了【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...