堆排序講解 大小頂堆構建 C語言實現

2021-10-06 13:38:49 字數 884 閱讀 6254

大頂堆或小頂堆的概念:

每乙個父節點都大於或小於其左右孩子節點的數值的完全二叉樹;

以線性序列表示(完全二叉樹)堆的意義在於:

ex. 例如:當前節點索引為4,其父節點索引為2,其左右兩個孩子的節點索引為8和9.

說白了,線性序列即為對的層序遍歷結果.

大頂堆構建過程

從無序序列中的最後乙個元素開始讀取

依次與其父節點進行數值比較,如果父節點數值小於當前讀取節點數值,則進行數值交換

直至當前節點到達根節點位置

堆排序過程:

將無序序列構建為大頂堆,

將其序列中第乙個資料與最後乙個資料進行交換

然後對剩下的資料在此重新構建大頂堆,重複執行,直至最後乙個序列資料被插入完成

/*

基礎資料結構

結構體包括

序列 序列長度

其中maxsize根據自身需求定義

*/typedef

struct

sqlist;

/*交換序列中兩索引位置的數值*/

void

swap

(sqlist *l,

int i,

int j)

/*構建大頂堆函式*/

void

maxheap

(sqlist *l,

int size)

else

/* 迴圈結束條件:

1.當前所以已經被調整到了序列最前端

2.當前索引的父節點數值大於當前節點

*/}}

}/*大頂堆排序函式*/

void

heapsort

(sqlist *l)

}

c語言實現堆構建,堆調整,堆排序 詳細注釋

include 關於最小堆,我們關心的是更小的那個節點 int h 101 用於儲存陣列 int n 用於儲存堆的大小 void swap int x,int y void sift down int i 傳入需要向下調整的編號,然後按照最小堆,向下調整 else flag 1 否則說明父節點已經比...

堆的構建及堆排序(C )

首先給出堆的定義 這裡 n個元素的序列當且僅當滿足下列關係之一時,稱之為堆。情形1 情形2 其中i 1,2,n 2向下取整 這邊兩個定義是由序號從0開始取還是從1開始取決定的。說明一下定義的意思,因為堆是完全二叉樹 官方定義是 若設二叉樹的深度為h,除第 h 層外,其它各層 1 h 1 的結點數都達...

C語言實現堆排序

一 堆排序的原理。堆排序是利用堆的性質進行的一種選擇排序。堆實際上是一顆完全二叉樹,其中任何一非葉節點滿足性質 key i key 2i 1 key i key 2i 或 key i key 2i 1 key i key 2i 任何一非葉節點的關鍵字不大於或者不小於其左右孩子。二 堆排序的思想。利用...