堆排序 演算法導論

2021-09-23 15:50:09 字數 1564 閱讀 6418

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