堆排序一開始需要將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較大時 先來講講堆 二叉堆 是乙個陣列,它可以近似被看作是乙個完全二叉樹。樹上每乙個節點對應乙個元素,除了最底層外,該樹是完全充滿的,而且是...