資料結構系列 堆與堆排序

2021-07-05 05:28:57 字數 901 閱讀 4522

堆是一種特殊的樹結構,通常將按照一定順序排列好的樹結構稱之為堆。

堆是電腦科學中一類特殊的資料結構的統稱。堆通常是乙個可以被看做一棵樹的陣列物件。

堆總是滿足下列性質:

將根節點最大的堆叫做最大堆或大根堆,根節點最小的堆叫做最小堆或小根堆。

常見的堆有二叉堆、斐波那契堆等。

堆的定義如下:n個元素的序列當且僅當滿足下關係時,稱之為堆。 (k

i<= k

2i,k

i<= k

2i+1

)或者(k

i>= k

2i,k

i>= k

2i+1

), (i = 1,2,3,4...n/2)

若將和此次序列對應的一維陣列(即以一維陣列作此序列的儲存結構)看成是乙個完全二叉樹,

則堆的含義表明,完全二叉樹中所有非終端結點的值均不大於(或不小於)其左、右孩子結點的值。

若序列是堆,則堆頂元素(或完全二叉樹的根)必為序列中n個元素的最小值(或最大值)。

1、堆的陣列化

按照樹的廣度優先順序進行排列,得到乙個一維陣列 a[n].

下標為i的節點對應的父節點為 a[(i-1)/2] ,對應左右子節點分別為 a[(i*2)+1]、a[(i*2)+2]。

2、堆節點的插入

插入到陣列的最後一項,然後和其父節點進行比較,並做出相應的交換。同時更新整個堆的排序。

3、對節點的刪除

總是刪除根節點,並將陣列的最後乙個元素替換根節點,此時同步更新整個堆的排序。

4、堆排序

對於構造完成的最小堆陣列,不斷取出根節點後刪除根節點,直到陣列中沒有其他元素。取出的數的序列即為排好序的序列。

5、堆排序的時間複雜度:o(n*logn)

更多資訊請檢視本人的個人**:

資料結構 堆與堆排序

堆其實是從完全二叉樹演變過來的並且用來儲存資料的,什麼是完全二叉樹呢?完全二叉樹就是 若設二叉樹的深度為h,除第h層外,其它各層 1 h 1 的結點數都達到最大個數,第h層所有的結點都連續集中 在最左邊,這就是完全二叉樹。我們知道二叉樹可以用陣列模擬,堆自然也可以。現在讓我們來畫一棵完全二叉樹 從圖...

堆資料結構與堆排序

堆資料結構 堆 二叉堆 是近似的完全二叉樹,最底層允許不滿,堆的相關,陣列長度length,heap size有效長度 堆的有效元素,未排序的數目 heap size堆雖然很像二叉樹,但是我的理解就是用二叉樹的邏輯,但是最主要的區別在,堆的儲存是用陣列,只是用下標來幫助理解 堆的儲存結構 從上往下,...

堆(資料結構)及堆排序

這裡的堆是指一種資料結構 或資料結構屬性 非指堆記憶體。堆屬性用二叉樹來體現,具堆屬性的資料結構才可被叫做為堆。具堆屬性的資料結構滿足以下筆記的 順序 和 形狀 兩個條件。將某資料結構如陣列,將陣列的元素依次安排在二叉樹中的根結點 根結點的左孩子 根結點的右孩子位置之上,再將剩餘元素依次安排在根結點...