python版
1defheapsort(input):
2output =
3buildheap(input)
4print
input
5while
input:6i
=len(input)-1
7input[0],input[i]
=input[i],input[0]89
ifinput:
10maxheapify(input,0)
11return
output
1213
defmaxheapify(input, i):
14if
i <
0: 15
return
16left =2
*i+1
#because the i from 0, not 1
17right =2
*i+2
18largest =i
19length
=len(input)
20if
left
<
length:
21if
input[i]
<
input[left]: largest
=left
22if
right
<
length:
23if
input[largest]
<
input[right]: largest
=right
24if
largest
!=i:
25input[i], input[largest]
=input[largest], input[i]
26maxheapify(input,largest)
2728
defbuildheap(input):
29length
=len(input)
30if
length
<2:
return
31nonleaf
=length/2
32for
i in
range(nonleaf,-1
,-1):
33maxheapify(input,i)
堆排序介紹完了,有什麼應用
我看到的在搜尋引擎在生成查詢結果時,需要對n個候選集進行排序並取前r個作為查詢結果,這時r< 1 and a[parent(i)] < a[i]
5 do exchange a[i],a[parent(i)]
6 i ← parent(i)
max-heap-insert(a, key)
1 heap-size[a] ← heap-size[a] + 1
2 a[heap-size[a]] ← -∞
3 heap-increase-key(a, heap-size[a], key)
堆排序 演算法導論
python版 1 defheapsort input 2output 3buildheap input 4print input 5while input 6i len input 1 7input 0 input i input i input 0 89 ifinput 10maxheapify...
演算法導論 堆排序
堆排序演算法 heapsort max heapify過程,其執行時間為 lg n 是保持最大堆性質的關鍵 build max heap過程,以線性時間執行,可以在無序的輸入陣列基礎上構造出最大堆 heapsort過程,執行時間 n lg n 對乙個陣列原地進行排序 heapsort過程 1 建最大...
演算法導論之堆排序
堆排序主要是先建堆,轉化為最大堆,每次把最大的乙個 即最大堆的根節點 和最後乙個交換,這樣每次都把當前最大的乙個放到了最後。堆排序演算法中,最關鍵的就是構造初始堆。需要編寫乙個維護大頂堆性質的函式max heapify。當輸入乙個陣列l和乙個下標i,然後呼叫max heapify時,比較l i l ...