Java實現堆排序演算法

2021-07-14 17:27:16 字數 915 閱讀 3390

這是第乙個:

之前只知道如何建堆,不知道演算法導論上還有如此巧妙的堆調整演算法。所以一開始自己寫的堆排序演算法非常低效,事件複雜度為o(n^2),因為每次排序都是重建堆。但是,自己寫的程式還是有自己獨特的思想的, 依然要分享出來給大家看看,尤其是確定陣列表示的樹的首個葉子節點的位置的方法。

以下為**:

package test;

class heapsort;

heapsort(a,0);

for(int i:a)

}public

static

void

heapsort(inta,int l)

//else if rightelse

if(right<=left&&rootint t=temp[i/2];

temp[i/2]=temp[i];

temp[i]=t;}}

//if left--root--nll

else

}}//for

end=start;

start=start/2;

}//while

for(int i=0;ipackage test;

public

class

heapsort;

heapsort(a);

for(int i:a)

}private

static

void

heapsort(inta)

for(int heapsize=a.length;heapsize>0;heapsize--)

}private

static

void

heapify(int a,int largest,int heapsize)

}}

堆排序演算法(java實現)

public class heapsort 左孩子編號 public static int leftchild int i 右孩子編號 public static int rightchild int i 保持最大堆的性質 param a,堆中的陣列元素 param i,對以該元素為根元素的堆進行調...

java實現堆排序演算法

堆排序相對簡單的冒泡演算法快就快在它利用了每一次排序,將結果儲存下來。堆結構是一顆完全二叉樹,即除了最後一層其他層的每個結點都包含兩個子結點,我們知道擁有子節點的元素腳標是0至n 2 1,我們從n 2 1開始向上構建大頂堆結構,每乙個父親結點的值都大於孩子結點,先取得左結點l和右結點r,比較結點大小...

排序演算法之堆排序java實現

堆排序 heap sort 的基本思想是迴圈執行如下過程直到陣列為 空 什麼是最大堆?堆是乙個具有這樣性質的順序二叉樹,每個非葉子節點的關鍵字大於等於它的孩子結點的關鍵字。顯然在乙個堆中,根節點具有最大值,而且堆中任何乙個結點的非空左 右子樹都是乙個堆,它的根節點到任一葉子的每條路徑上的節點都是遞減...