資料結構與演算法 堆排序

2021-07-24 13:11:40 字數 790 閱讀 3383

1、堆的性質

堆是一棵完全二叉樹,除最後一層外每層都是滿的(元素個數為2^(i-1),根節點為第1層),最後一層如果不滿則只缺少右邊葉結點。如果按照廣度優先,即從上至下,從左至右對節點編號。根節點序號為0,節點i的父節點是(i-1)/2,左子節點是2*i+1。最小堆中任意父節點不能比子節點大,最大堆中任意父節點不能比子節點小。

private static int getparent(int i)

private static int getleftchild(int i)

2、最小堆的調整規則

如果將最小堆中的頂點替換成某乙個數,若這個數仍然比它的左右子節點小,則整個結構仍然是最小堆。否則將此節點與左右子節點中較小的節點發生交換,只有較小子節點所在的子樹需要調整

//遞迴方法,不推薦

private static void adjustchildminheap(int almostheapexceptcur,int cur,int last)

}

4、利用最小堆排序

因為最小堆的性質,根節點是堆中最小的。我們可以每次將根節點取出來放入已排序序列。同時堆結構被破壞,根節點沒有值,我們可以將最後乙個節點放入根節點,也就是交換根節點與最後節點,然後繼續調整結構使之成為最小堆。

public static void minheapsorttodes(int nums)

}

資料結構與演算法 堆排序

基礎概念 堆排序是利用堆這種資料結構而設計的一種排序演算法,堆排序是一種選擇排序,它的最壞,最好,平均時間複雜度均為o nlogn 它也是不穩定排序。通俗理解 將待排序序列構造成乙個大頂堆,此時,整個序列的最大值就是堆頂的根節點。將其與末尾元素進行交換,此時末尾就為最大值。然後將剩餘n 1個元素重新...

資料結構與演算法 堆排序

堆排序堆排序是指利用堆這種資料結構所設計的一種排序演算法。堆是乙個近似完全二叉樹的結構,並同時滿足堆的性質 即子節點的鍵值或索引總是小於 或者大於 它的父節點,堆排序的時間複雜度為o nlogn 來自維基百科 什麼是堆 堆是一種特殊的完全二叉樹,它的性質為 任意節點大於等於或者小於等於它的左右節點。...

資料結構與演算法 堆排序

目錄堆排序 heapsort 是指利用堆這種資料結構所設計的一種排序演算法。堆積是乙個近似完全二叉樹的結構,並同時滿足堆積的性質 即子結點的鍵值或索引總是小於 或者大於 它的父節點。堆排序可以說是一種利用堆的概念來排序的選擇排序。分為兩種方法 大頂堆 每個節點的值都大於或等於其子節點的值,在堆排序演...