大頂堆或小頂堆的概念:
每乙個父節點都大於或小於其左右孩子節點的數值的完全二叉樹;
以線性序列表示(完全二叉樹)堆的意義在於:
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 任何一非葉節點的關鍵字不大於或者不小於其左右孩子。二 堆排序的思想。利用...