package sortarith;
/** * 堆排序 構建最大堆,堆頂即為最大元素,每次取出最大元素後,再重新構建堆,這樣再拿出次大值,迴圈往返
* 注意:構建堆時需要調整每個非葉子節點,確定其為子堆的最大值;而調整堆時,只需要調整堆頂元素
* 特例1:若所給待排序陣列array本身已是最大堆型別,可不進行構建堆,即可省去第乙個for迴圈過程
* 特例2:若所給待排序陣列array本身僅第乙個元素待調整,
* 可省去第乙個for迴圈過程, 而呼叫adjustheap(array,0,array.length-1),調整第乙個元素即可;
* 時間複雜度:o(nlogn),其中構建堆為o(n),每次調整堆為logn
* 不穩定排序 適合個數較多的排序
* @author lwk
* */
public class heapsort ;
heapsort(array);
for(int i=0;i= 0; i--)
//adjustheap(array,0,array.length-1);
//此時堆頂為最大值
for (int i = array.length-1; i >=0; i--)
}/**
* 調整堆方法 待調整元素為array[index] 使 index - end 成為乙個最大堆
* @param array
* @param index 待調整元素
* @param end
*/public static void adjustheap(int array, int index, int end)
//若待調整元素本身為三者最大值則下面均不需要再調整,退出迴圈
if(array[index] > array[i])
//否則將最大值與父節點交換
int temp = array[i];
array[i] = array[index];
array[index] = temp;
//交換後,則下乙個待調整元素為i處元素,因此下次父節點仍為array[index]
//此後i = 2*i + 1,為array[index]的左子節點
index = i;
} }
}
演算法 排序演算法之堆排序
堆排序 heapsort 是指利用堆這種資料結構所設計的一種排序演算法。堆積是乙個近似完全二叉樹的結構,並同時滿足堆積的性質 即子結點的鍵值或索引總是小於 或者大於 它的父節點。堆排序可以說是一種利用堆的概念來排序的選擇排序。分為兩種方法 大頂堆 每個節點的值都大於或等於其子節點的值,在堆排序演算法...
排序演算法之堆排序
前言 今天我來介紹下堆排序,在寫堆排序 之前,我們要知道堆的概念!堆的定義 n個關鍵字序列kl,k2,kn稱為 heap 當且僅當該序列滿足如下性質 簡稱為堆性質 1 ki k 2i 且ki k 2i 1 1 i n 當然,這是小根堆,大根堆則換成 號。k i 相當於二叉樹的非葉子結點,k 2i 則...
排序演算法之堆排序
堆排序演算法是選擇排序的一種,該演算法只是通過堆,最大堆 或者最小堆選擇出乙個待排序序列中的最大值,或者最小值。要想實現堆排序演算法,就需要構建什麼堆,這裡也最小堆為例。說明什麼是堆,怎麼構建乙個堆。假設待排序序列為a n 為乙個陣列。陣列的長度為n 陣列下標為 0,1,2,i,2i,2i 1 n ...