堆是一種特殊的樹結構,通常將按照一定順序排列好的樹結構稱之為堆。
堆是電腦科學中一類特殊的資料結構的統稱。堆通常是乙個可以被看做一棵樹的陣列物件。
堆總是滿足下列性質:
將根節點最大的堆叫做最大堆或大根堆,根節點最小的堆叫做最小堆或小根堆。
常見的堆有二叉堆、斐波那契堆等。
堆的定義如下: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堆雖然很像二叉樹,但是我的理解就是用二叉樹的邏輯,但是最主要的區別在,堆的儲存是用陣列,只是用下標來幫助理解 堆的儲存結構 從上往下,...
堆(資料結構)及堆排序
這裡的堆是指一種資料結構 或資料結構屬性 非指堆記憶體。堆屬性用二叉樹來體現,具堆屬性的資料結構才可被叫做為堆。具堆屬性的資料結構滿足以下筆記的 順序 和 形狀 兩個條件。將某資料結構如陣列,將陣列的元素依次安排在二叉樹中的根結點 根結點的左孩子 根結點的右孩子位置之上,再將剩餘元素依次安排在根結點...