資料結構 五 堆排序

2021-08-15 03:09:03 字數 761 閱讀 5281

1、演算法流程

(1)對原始資料構建大根堆:

a、從下至上,遍歷每個非葉子父節點,保證每個非葉子父節點都比它的左右子節點來的大,

非葉子父節點的對應索引範圍為

[0,n/2-1];

b、在遍歷每個非葉子父節點的時候,如果發生該節點交換(下沉)

,那麼要遞迴下去

(2)交換大根堆構建後的陣列的首個元素與末尾元素,這時候陣列的末尾數值最大,

排除該元素排序

。(3)

接著因為這個堆,就相當於堆頂元素被替換成了新的元素,其他元素都是不變的,因此接著只需要從堆頂開始做下沉操作,從新構架最大堆(

不需要遍歷調整所有的非葉子節點)。

2、**實現

//堆排序,對於每個非葉子節點,如果比葉子節點小,那麼就要下沉遞迴該數值

void min_sink(int*data,int node,int length)

{ if (node>=(length/2))

return;

int sink_flag= false;

int min_index=node;

int min_data=data[node];

for(int i=1;i<=2;i++)

{if (min_data=0;i--)//遍歷每個非葉子節點,構建大根堆

min_sink(data,i,length);

for(int count=1;count

資料結構經典演算法之五 堆排序

堆排序基本思想 減治演算法。通過堆來選擇資料,其中排公升序建大堆,排降序建小堆 首先,在這裡簡單介紹一下二叉堆的概念 二叉堆在邏輯上可視為完全二叉樹,在物理上可視為陣列,本質上是對於任意乙個結點,要求根的值 針對大堆 所有的子樹結點的值,其基本作用是找最值 堆排序主要分為以下三部分 1.向下調整 2...

堆(資料結構)及堆排序

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

資料結構 堆以及堆排序

堆可以看作是一棵完全二叉樹,除最後一層外,每一層都是填滿的,最後一層從左到右依次填入 在堆上,對任意乙個結點來說,越接近頂部,權值就越大 一般指大頂堆 並且它的權值大於等於它所在子樹所有點的權值 我們把根結點權值大於等於樹中結點權值的稱為大根堆,小於等於樹種結點權值的稱為小根堆 下圖就是乙個大根堆的...