#include#includevoid swap(int* data, int i, int j)
//優美的遞迴實現堆調整
void adjustbigtopheap(int* data, int root, int n)
//max != root, 意味著左孩子或右孩子大於父節點的值 ,即根為root的二叉樹的大頂堆性質被破壞,需重新調整
if(max != root)
/*如果max == root,意味著根為root的二叉樹仍滿足大頂堆性質,亦無需再向下調整(其子樹因為沒有發生值交換,故大頂堆性質沒有被破壞)*/
} }void buildbigtopheap(int* data, int n)
void bigtopheapsort(int* data, int n)
}int main(void)
return 0;
}
選擇排序之堆排序
1 堆排序是利用堆這種資料結構而設計的一種排序演算法,堆排序是一種選擇排序,它的最壞,最好,平均時間複雜度均為o nlogn 它也是不穩定排序。2 堆是具有以下性質的完全二叉樹 每個結點的值都大於或等於其左右孩子節點的值,稱為大頂堆,注意 沒有要求節點的左孩子的值和右孩子的值的大小關係。3 每個節點...
選擇排序之堆排序
堆的定義,n個關鍵字序列l 1.n 稱為堆,當且僅當序列滿足 1.l i l 2i 且 l i l 2i 1 大根堆 2.l i l 2i 且l i l 2i 1 小根堆 i需要滿足的特點為 1 i n 2 可以將一維陣列視為一棵完全二叉樹,滿足條件1的堆稱為大根堆,大根堆的最大元素存放在根結點,且...
選擇排序之堆排序
堆排序 heapsort 是利用堆積樹這種資料結構所設計的一種排序演算法,他是選擇排序的一種,其儲存結構類似於完全二叉樹 二叉堆滿足的性質 1父節點的值總是大於或者等於 小於或者等於 孩子節點的值的 2.每個節點的 左右子樹都是乙個二叉堆。當父節點的值大於或者等於任意乙個子結點的值時,則成為大根堆 ...