堆排序演算法 python實現

2021-09-25 03:13:51 字數 1237 閱讀 6995

堆排序一開始需要將n個資料存進堆裡,所需時間為o(nlogn)。排隊過程中,堆從空堆的狀態開始,逐漸被資料填滿。由於堆的高度小於log2n ,所以插入乙個資料需要的時間為o(logn)

from collections import deque

defswap_param

(l, i, j)

: l[i]

, l[j]

= l[j]

, l[i]

return l

defheap_adjust

(l, start, end)

: temp = l[start]

i = start

j =2* i

while j <= end:

if(j < end)

and(l[j]

< l[j +1]

):j +=

1if temp < l[j]

: l[i]

= l[j]

i = j

j =2* i

else

:break

l[i]

= temp

defheap_sort

(l):

l_length =

len(l)-1

first_sort_count = l_length /

2for i in

range

(first_sort_count)

: heap_adjust(l, first_sort_count - i, l_length)

for i in

range

(l_length -1)

: l = swap_param(l,

1, l_length - i)

heap_adjust(l,

1, l_length - i -1)

return

[l[i]

for i in

range(1

,len

(l))

]def

main()

: l = deque([50

,16,30

,10,60

,90,2

,80,70

])0)

print heap_sort(l)

main(

)

python堆排序演算法 Python 堆排序

python 堆排序 堆排序 heapsort 是指利用堆這種資料結構所設計的一種排序演算法。堆積是乙個近似完全二叉樹的結構,並同時滿足堆積的性質 即子結點的鍵值或索引總是小於 或者大於 它的父節點。堆排序可以說是一種利用堆的概念來排序的選擇排序。largest i l 2 i 1 left 2 i...

堆排序演算法實現

include define true 1 define false 0 typedef struct recordtype void sift recordtype r,int k,int m 調整堆 r i t void crt heap recordtype r,int length 建立堆 ...

Python實現經典排序演算法 堆排序

上次說到了經典演算法選擇排序,感覺是比較簡單的演算法,這一次說一說稍微有點難度的堆排序。堆排序的時間複雜度要明顯優於前面的氣泡排序,插入排序和選擇排序 侷限於n較大時 先來講講堆 二叉堆 是乙個陣列,它可以近似被看作是乙個完全二叉樹。樹上每乙個節點對應乙個元素,除了最底層外,該樹是完全充滿的,而且是...