堆排序(java版本)

2021-08-19 15:39:41 字數 381 閱讀 4900

思路:構造大頂堆,將堆頂元素和最後乙個元素交換,從新調整大頂堆,重複此過程完成排序。

節點i的父節點為: (i-1)/2;

節點i的左子樹為:i*2+1;

節點i的右子樹為:i*2+2;

調整大頂堆時注意要從最後一課子樹從下向上調整

public static void heapsort(int a)

for(i=a.length-1;i>=0;i--)

}public static void adjustheap(int a,int index,int heapsize)

if(righta[largest])

if(largest!=index)

}

堆排序(Swift版本)

一 什麼是堆?堆可視為 以陣列方式儲存的一棵完全二叉樹 堆又分為最大堆和最小堆,最大堆就是對於整個二叉樹中的每乙個節點都滿足 節點的鍵值比其左右子節點的鍵值都要大,對應的最小堆則是 節點的鍵值比其左右子節點的鍵值都要小 二 堆排序的思路 對於乙個儲存最大堆的陣列arr 長度為size 根節點arr ...

排序演算法 堆排序(遞迴版本)

堆積排序 heapsort 是指利用堆積樹 堆 這種資料結構所設計的一種排序演算法。堆積樹是乙個近似完整二叉樹的結構,並同時滿足堆積屬性 即子結點的鍵值或索引總是小於 或者大於 它的父結點。在堆積樹的資料結構中,堆積樹中的最大值總是位於根節點。堆積樹中定義以下幾種操作 1.最大堆積調整 max he...

java實現堆排序

許多應用要用堆,比如,優先佇列,即佇列的擴充,佇列的每個元素增加乙個稱為優先順序的字段,優先佇列可以是線性結構的,但要有較高的效率,應把它組織成堆結構。元素入隊是,相當於執行堆的插入演算法 但在隊頭每次刪除的總是隊頂具有最大優先順序的元素,因此可以把它稱為最大優先順序佇列。再比如,堆排序是選擇排序中...