python實現堆排序

2022-06-11 18:00:16 字數 1315 閱讀 5320

理論知識:

二叉樹:度不超過2的樹(節點最多有兩個叉)

滿二叉樹:乙個二叉樹,如果每乙個層的節點數都達到最大值,則這個二叉樹就是滿二叉樹。

完全二叉樹:葉節點只能出現在最下層和次下層,並且最下面一層的節點都集中在該層最左邊的若干位置的二叉樹。

大頂堆:一顆完全二叉樹,滿足任一節點都比其孩子節點大。

小頂堆:一顆完全二叉樹,滿足任一節點都比其孩子節點小。

建堆過程

1.建立堆

2.得到堆頂元素,將堆最後乙個元素放到堆頂,此時可通過一次調整重新使堆有序

3.堆頂元素為第二大元素

4.重複步驟3,知道堆變空

import

random

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自帶模組

import

heapq

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