演算法 排序演算法之堆排序

2021-07-24 13:08:25 字數 1177 閱讀 5046

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 ...