堆排序的序列可以看成一棵完全二叉樹,完全二叉樹比較適合用陣列來儲存,陣列下標從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...