排序演算法(六) 堆排序

2021-06-19 22:48:00 字數 514 閱讀 3721

堆定義:

堆是一種完全二叉樹,每個結點都大於等於其子結點的稱為大頂堆,每個結點都小於等於其子結點的稱為小頂堆。

堆排序定義:

將待排序的序列構造成乙個大頂堆,此時堆頂是最大值,將其移到序列最末端後,剩餘的序列重新構造乙個大頂堆,如此反覆直到得到乙個有序序列。

時間複雜度:o(nlogn)

實現:public class heap

system.out.println("the heap ...");

sortutils.print(arr);

for(i=arr.length-1;i>1;i--)

}/**

* 構造大頂堆

** @param arr

* @param s

* @param len

*/private void heap(int arr,int s,int len){

int tmp=arr[s];

int i;

for(i=2*s+1;i

重溫演算法導論(六) 堆排序

堆排序,思想就是先建立最大堆,然後從最大堆中取出最大數,作為陣列的最後乙個資料,重複並把資料取完。排序的陣列結構,包含堆陣列的長度,有效的堆大小 和堆資料 a每個節點對應的父節點,左子節點,右子節點 維護最大堆的性質,先假定先假定left i 和right i 為最大堆,maxheapify a,2...

演算法 堆排序(堆)

使用情形 插入乙個數 求集合當中的最小值 刪除最小值 刪除任意乙個元素 修改任意乙個元素 用一維陣列儲存二叉樹,左兒子在陣列中為根節點在陣列中的位置的2倍,右兒子在陣列中為根節點在陣列中的位置的二倍加一。求當前堆的最小值 void down int u 輸入乙個長度為n的整數數列,從小到大輸出前m小...

排序演算法6 堆排序

堆排序可以看作是簡單選擇排序的一種的改進方法,平均複雜度為 o n log n 因此應用場合較多。其原理同簡單選擇排序相似 將資料分為已排序和未排序的兩部分,並且不斷的從未排序資料中選取最大 或最小 資料加入到已排序集合中。不同之處在於,堆排序採用了一種特殊的二叉堆結構來快速的尋找最大值。如下圖,首...