大頂堆小頂堆

2021-10-10 14:30:55 字數 1297 閱讀 1792

堆通常是乙個可以被看做一棵完全二叉樹的陣列物件

如果對一棵有n個結點的完全二叉樹的結點按層序編號(從第1層到第 +1層,每層從左到右),則對任一結點i(1<=i<=n),有:

(1)如果i=1,則結點i無雙親,是二叉樹的根;如果i>1,則其雙親是結點。

(2)如果2i>n,則結點i為葉子結點,無左孩子;否則,其左孩子是結點2i。

(3)如果2i+1>n,則結點i無右孩子;否則,其右孩子是結點2i+1。

(4)若對二叉樹的根結點從0開始編號,則相應的i號結點的雙親結點的編號為(i-1)/2,左孩子的編號為2i+1,右孩子的編號為2i+2。

每個結點的值都大於或等於其左右孩子結點的值

每個結點的值都小於或等於其左右孩子結點的值

對堆加上以上限制,我們可以作出大頂堆:

f [i

]=f(

i),i

∈[0,

len)

若∃2∗

i+

1

n,則f

[i

]>f[

2∗i+

1]若∃

2∗i+

2

n,則f

[i

]>f[

2∗i+

2]

f[i]=f(i), i\in[0,len)\\ 若\exist 2*i+1f[2*i+1]\\ 若\exist2*i+2f[2*i+2]

f[i]=f

(i),

i∈[0

,len

)若∃2

∗i+1

n,則f

[i]>f[

2∗i+

1]若∃

2∗i+

2n,則f

[i]>f[

2∗i+

2]依據以上性質,我們每次有新資料加入陣列,可以從最後乙個非葉子節點即f[l

en/2

−1

]f[len/2-1]

f[len/

2−1]

對陣列進行整理,得到大頂堆。

void

buildmaxheap

(int

*num,

int len)}if

(num[i]

< num[

2*i+2]

&&2*i+2

< len)}}

}

堆排(大頂堆,小頂堆)

分類 資料結構 演算法相關 2009 10 15 12 26 2289人閱讀收藏 舉報汗,別人都說大小頂堆只是改改大於號的問題,可我的 從大頂堆只改動大於號調整為小頂堆竟然越界樂,掣肘!後來幾經更改才發現是傳參的問題 見 看來大頂堆改小頂堆不是 亦或是我rp出點問題?搞笑的是 磚頭 c b 竟然對越...

Java 堆排序 大頂堆 小頂堆

引用 堆排序 heapsort 是指利用堆這種資料結構所設計的一種排序演算法。堆積是乙個近似完全二叉樹的結構,並同時滿足堆積的性質 即子結點的鍵值或索引總是小於 或者大於 它的父節點。堆排序的平均時間複雜度為 nlogn 演算法步驟 1.建立乙個堆h 0.n 1 2.把堆首 最大值 和堆尾互換 3....

小頂堆及大頂堆的建立

首先明確堆是乙個完全二叉樹,小頂堆指根結點的值小於或等於左右子節點的值,大頂堆指根結點的值都大於或等於左右子節點的值 關於大小頂堆的建立更詳細的介紹 include include include include include include include include using names...