堆排序就是利用堆(假設利用大頂堆)進行排序的方法。它的基本思想是,將待排序的序列構造成乙個大頂堆。此時,整個序列的最大值就是堆頂的根節點。將它移走(其實就是將其與堆陣列的末尾元素交換,此時末尾元素就是最大值),然後將剩餘的 n-1 個序列重新構造成乙個堆,這樣就會得到 n 個元素中次大的值。如此反覆執行,便能得到乙個有序序列了。
堆排序的時間複雜度為o(nlogn)
public
class maxheap
public
void
buildmaxheap()
}public
void
heapsort()
}public
void
maxify(int i)
private
intparent(int i)
private
intleft(int i)
private
intright(int i)
}
測試**
int array=new
int;
maxheap heap=new maxheap(array);
heap.buildmaxheap();
heap.heapsort();
system.out.println("執行堆排序後陣列的內容");
printheap(heap.heap);
排序演算法之堆排序java實現
堆排序 heap sort 的基本思想是迴圈執行如下過程直到陣列為 空 什麼是最大堆?堆是乙個具有這樣性質的順序二叉樹,每個非葉子節點的關鍵字大於等於它的孩子結點的關鍵字。顯然在乙個堆中,根節點具有最大值,而且堆中任何乙個結點的非空左 右子樹都是乙個堆,它的根節點到任一葉子的每條路徑上的節點都是遞減...
java實現堆排序
許多應用要用堆,比如,優先佇列,即佇列的擴充,佇列的每個元素增加乙個稱為優先順序的字段,優先佇列可以是線性結構的,但要有較高的效率,應把它組織成堆結構。元素入隊是,相當於執行堆的插入演算法 但在隊頭每次刪除的總是隊頂具有最大優先順序的元素,因此可以把它稱為最大優先順序佇列。再比如,堆排序是選擇排序中...
堆排序java實現
公升序用大根堆,降序用小根堆 調整堆 從根節點開始向下調整堆 先建立初始堆,從n 2 1 第乙個非葉子節點 節點開始,將之看做根節點,向下調整堆,到根節點結束 迴圈i from n 1 to 0,每次取出堆的最頂層根節點,即陣列下標為0,然後與節點i交換,這樣對於大根堆而言,最大值總是在後面,再從根...