理論知識:二叉樹:度不超過2的樹(節點最多有兩個叉)
滿二叉樹:乙個二叉樹,如果每乙個層的節點數都達到最大值,則這個二叉樹就是滿二叉樹。
完全二叉樹:葉節點只能出現在最下層和次下層,並且最下面一層的節點都集中在該層最左邊的若干位置的二叉樹。
大頂堆:一顆完全二叉樹,滿足任一節點都比其孩子節點大。
小頂堆:一顆完全二叉樹,滿足任一節點都比其孩子節點小。
建堆過程1.建立堆
2.得到堆頂元素,將堆最後乙個元素放到堆頂,此時可通過一次調整重新使堆有序
3.堆頂元素為第二大元素
4.重複步驟3,知道堆變空
importrandom
def sift(li, low, high):
tmp =li[low]
i =low
j = 2 * i + 1
while j <= high: #
情況2:i已經是最後一層了
if j + 1 <= high and li[j+1] > li[j]: #
右孩子存在並且大於左孩子
j += 1
if tmp li[i] =li[j]
i =j
j = 2 * i + 1
else
:
break
#情況1:j位置比tmp小
li[i] =tmp
defheap_sort(li):
#1.建堆
n =len(li)
for low in range(n//2-1, -1, -1):
sift(li, low, n-1)
#2. 挨個輸出 退休-棋子-調整 重複n次或n-1次
for high in range(n-1, -1, -1):
li[0], li[high] =li[high], li[0]
sift(li, 0, high-1)
li = list(range(100000))
random.shuffle(li)
heap_sort(li)
python自帶模組
importheapq
#priority queue
#li = [5,7,9,8,4,1,6,2,3]
#heapq.heapify(li)##
##print(li)
#print(heapq.nlargest(5, [1,2,5,4,7,8,9,6,3]))
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...