主程式:
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 轉成最大堆後,每次就將第乙個結點互最後乙個...