二叉樹之堆排序

2021-07-24 13:47:07 字數 1047 閱讀 6788

堆排序,首先要對堆的性質有了解,分大頂堆和小頂堆,我這次寫的是大頂堆,即父節點大於其子節點,在把堆無序後,從堆頂開始遍歷,得到大堆頂,把堆頂與最後乙個元素對換,這時,最後乙個元素就是最大值,這時,就不用考慮最後乙個元素了,開始迴圈。重新開始從頭遍歷,詳細過程寫在**裡,大家參考: :

/*此排序主要有2個難點,第乙個是初始化無序堆,第二個是交換元素形成有序堆

寫的是大頂堆

1.首先要從下三角開始遍歷,一層層的往前推,推到a[0],此時的a[0]是最大值。這時,此堆已經初始成功

2.a[0]即為最大頂,把a[0]與最後乙個元素a[len-1]交換,就不用考慮最後乙個值了,但是這時的堆已經不符合

性質了。

3.因此開始從a[0]往下支路換,換到a[0]為 0--len-1 最大值,交換 a[0]和a[len-2]的值,這時,a[len-2]和a[len-1]

為有序的。

4.不斷迴圈,直到a[1]排好序,a[0]就不用排了。*/

#include//從下三角開始交換得到最大堆

void adjustmaxheap(int a, int len, int parentnodeindex)

//有左節點,沒有右節點

if(rightchildindex>=len)

//有左節點,有右節點

else

//進行比較和互換

if(a[targetindex]>a[parentnodeindex]) }

void initheap(int a, int len)

}int main()

; int len=8;

initheap(a, len);

for(int i=len-1;i>0;i--)

//關鍵語句

adjustmaxheap(a, i,0);

} for(int j=0;j

return 0;

}

二叉樹與堆排序

樹與二叉樹簡介 樹是一種資料結構,比如目錄結構,樹是一種可以遞迴定義的資料結構 樹是由n個節點組成的集合,如果n 0,那麼這是一顆空樹,如果n 0,那存在乙個節點作為樹的根節點,其他節點可以分為m個子樹,每個子樹本身又是一棵樹 一些概念 根節點 葉子節點 a就是根節點,沒有子樹的都是葉子節點,如圖中...

堆排序(完全二叉樹)

堆排序,一種全新的排序方式,運用了完全二叉樹存資料。假設根是u,那麼左兒子就是u 2,右兒子是u 2 1.用一維陣列手擼乙個堆排序。1,如何插入乙個數。heap size x up size 2,求集合中的最小值。heap 1 3,刪除最小值。heap 1 heap size size down 1...

二叉樹,排序二叉樹

說到二叉樹,這可是資料結構裡面的非常重要的一種資料結構,二叉樹是樹的一種,本身具有遞迴性質,所以基於二叉樹的一些演算法很容易用遞迴演算法去實現。作為一種非線性結構,比起線性結構還是相對複雜的,很多人甚至看不懂演算法的意思,不能理解。其實一開始接觸這些東西還是挺暈的,不過你多看幾遍,上機實現可能你就會...