最大堆排序java實現(演算法導論第6章)

2021-08-31 19:52:17 字數 1161 閱讀 7769

主程式:

package yangkunlin.algorithm.sort;

import yangkunlin.algorithm.tool.sorttool;

/*** 堆排序

* * 前提:堆的根節點的序號是1,並且滿足最大堆屬性。

* 堆是存放在陣列中的,堆的大小要小於陣列的大小。

* 注意下邊個方法的引數是以1開始記得。

* * 時間複雜度:o(nlgn)

* 原地排序,不需要多餘的空間。

* @author yangkunlin**/

public class heapsort

}/**

* 以第i個元素為根的子樹保持最大樹,終點為第heapsize個元素。source中第heapsize個元素之後的元素不予理會。

* 即堆的大小為heapsize,從陣列第乙個元素到第heapsize個元素為止。

* @param source

* @param i 第i個元素,指的是從1開始的。因此後邊在取陣列元素的時候,都有-1.

* @param heapsize

*/public void maxheapily(int source,int i ,int heapsize)

if(heapsize >= right && source[right-1] > source[largest-1])

if(largest != i)

}/**

* 構建最大堆樹

* @param source

*/public void bulidmaxheap(int source)

}/**

* 根據序號獲得左兒子的序號

*/public int left(int i)

/*** 根據序號獲得右兒子的序號

*/public int right(int i)

}

輔助類方法

/**

* 交換陣列中兩元素的位置

* @param source

* @param i

* @param j

*/public static void exchange(int source, int i, int j)

堆排序(最大堆高階) 演算法導論

上篇 堆排序 最大堆 說過,是按照書中的偽碼寫出,書中的根結點是1,但一般我們陣列的下標由0開始,故而現在改為由0開始 上篇已說過實現的過程,故而不再贅述,細節可見 上篇 將其中的一些條件改變即可 首先是建堆的值,由0開始的根結點,對於a n 它的父節點是 n 1 2,並且到0為止,都是父節點 故而...

java 實現最大堆及堆排序

從0開始的最大堆 通過插入排序的思想進行了優化 實現了增刪改查 從0開始的最大堆 通過插入排序的思想進行了優化 實現了增刪改查 author 葉葉葉 param public class maxheap public maxheap int capacity public int size publ...

最大堆實現堆排序

堆排序 這裡使用的是最大堆 思想 1 將當前的堆轉換成最大堆 從最大的非葉子結點開始,1 判斷根結點和左右結點的大小交換相互的位置,使得該子樹成為最大堆,每次交換成功後就繼續往該結點的子結點去重複 1 操作,直到根結點後再去下乙個非葉子結點,直到根結點 2 轉成最大堆後,每次就將第乙個結點互最後乙個...