選擇類排序之堆排序

2021-08-19 14:02:56 字數 2431 閱讀 7924

packagesort.algorithm;publicclassheapsort

// 右孩子編號

publicstaticintrightchild(inti)

/**

* 保持最大堆的性質

* 堆中的陣列元素

* 對以該元素為根元素的堆進行調整,假設前提:左右子樹都是最大堆

* 由於左右孩子都是最大堆,首先比較根元素與左右孩子,找出最大值,假如大於根元素,則調整兩個元素的值;

* 由於左孩子(右孩子)的值與根元素交換,有可能打破左子樹(右子樹)的最大堆性質,因此繼續呼叫,直至葉子元素。

*/

publicstaticvoidmax_heapify(inta,inti)else

if(right < heap_size && a[right] > a[largest])

if(largest == i)else

}

/**

* 建立最大堆。在資料中,下標a.length/2+1一直到最後的元素a.length-1都是葉子元素

* 因此從其前乙個元素開始,一直到

* 第乙個元素,重複呼叫max_heapify函式,使其保持最大堆的性質

*/

publicstaticvoidbuild_max_heap(inta)

}

/**

* 堆排序:首先建立最大堆,然後將堆頂元素(最大值)與最後乙個值交換,同時使得 堆的長度減小1

* 呼叫保持最大堆性質的演算法調整,使得堆頂元素成為最大值,此時最後乙個元素已被排除在外、

*/

publicstaticvoidheapsort(inta)

}

publicstaticvoidmain(string args) ;

heap_size = a.length;//最大數

heapsort(a);

//輸出結果

for(inti =0; i < a.length; i++)

}

}

選擇排序之堆排序

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的堆稱為大根堆,大根堆的最大元素存放在根結點,且...