堆排序(heapsort)是利用堆積樹這種資料結構所設計的一種排序演算法,他是選擇排序的一種,其儲存結構類似於完全二叉樹:
二叉堆滿足的性質:
1父節點的值總是大於或者等於(小於或者等於)孩子節點的值的
2.每個節點的·左右子樹都是乙個二叉堆。
當父節點的值大於或者等於任意乙個子結點的值時,則成為大根堆;當父節點總是小於或者等於任意乙個葉子節點的值時則被稱為小根堆。如下圖所示:
左邊為小根堆,右邊為大根堆。
對的存數結構一般採用陣列,如下圖所示。節點下標和在陣列裡面的值一一對應。
堆的建立:
例如:對上圖的大根堆進行排
將49與08交換,然後對餘下的幾個資料(不包括49)重新構建大根堆然後將堆頂元素與倒數第二個元素交換,重新構建大根堆。然後重複上述操作,直到堆頂為最小元素。這樣利用大根堆進行公升序排序就完成
下面是大根堆的實現**
void heapadjust(heaptype & h, int s, int m)調整堆,將其排列成大根堆,一次操作只能保證堆頂元素為最大元素。將堆頂元素與當前最大的元素交換。然後在後面的操作中去掉這個元素h.r[s]=rc;
}
void heapsort(heaptype & h)}
選擇排序之堆排序
include includevoid swap int data,int i,int j 優美的遞迴實現堆調整 void adjustbigtopheap int data,int root,int n max root,意味著左孩子或右孩子大於父節點的值 即根為root的二叉樹的大頂堆性質被破壞...
選擇排序之堆排序
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的堆稱為大根堆,大根堆的最大元素存放在根結點,且...