python實現堆排序

2021-09-25 01:30:32 字數 1075 閱讀 3015

堆排序的序列可以看成一棵完全二叉樹,完全二叉樹比較適合用陣列來儲存,陣列下標從0開始儲存,這樣的話下標為i節點的左孩子為2i+1,右孩子為2i+2。父節點為i/2。

def

ajustheap

(i,heaplist,lastindex)

:# i是父節點

temp = heaplist[i]

j = i *2+

1# 左孩子

while

(j <= lastindex)

:if j < lastindex and heaplist[j]

< heaplist[j+1]

: j = j +

1if temp >= heaplist[j]

:break

else

: heaplist[i]

= heaplist[j]

i = j

j = j *2+

1 heaplist[i]

= temp

"堆排序"

list1 =

[101

,843

,206

,156

,423

,366

,624

,1200

]

listlen =

len(list1)

for i in

range

((listlen-2)

//2,-

1,-1

):# 從最後乙個非葉子結點開始

ajustheap(i,list1,listlen-1)

'''堆頂與最後乙個記錄交換位置,並去除後再重新調整'''

for j in

range

(listlen-1,

0,-1

):list1[0]

,list1[j]

= list1[j]

,list1[0]

ajustheap(

0,list1,j-1)

list1

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...