首先,堆分為兩種:大根堆和小根堆。均可看成是一棵完全二叉樹的順序儲存結構。
對於大根堆,樹中任一節點的值均不小於其孩子節點的值;同樣,對於小根堆,樹中任一節點的值均不大於其孩子節點的值。
對於樹中任一節點,若其下標為 i ,則該節點的左右孩子的下標為 2i+1 和 2i+2。則對於任一節點n,其父節點的下標為(n-1)/2 向下取整。
堆排序的步驟可以分為2步(假設我們採用最大堆,在陣列上操作):
1 構建最大堆,從下往上調整堆,則現在陣列的最開始位置為堆的最大元素
2 將陣列第乙個元素和最後乙個元素交換,對除去最後乙個元素的堆進行向下調整
首先陣列元素交換的**:
package sortalgorithm;
public class arrayutils
public static void printarray(int arr) }
public static void main(string args)
; printarray(arr1);
}}
堆排序的**:
package sortalgorithm;
public class heapsort ;
arrayutils.printarray(arr);
system.out.println();
heapsort(arr);
arrayutils.printarray(arr); }
public static void heapsort(int arr) }
public static void buildmaxheap(int arr) }
public static void maxheap(int arr,int heapsize,int index) }
}
堆排序(Heap Sort) java實現
學習自嚴蔚敏 吳偉民的 資料結構 清華大學出版 過於複雜,理解的不夠透徹,只存放 部分 1 建立堆 由於使得陣列元素遞增排序,所以先建乙個 大頂堆 即先選得乙個關鍵字為最大的記錄並與序列中最後乙個記錄交換 所以,每次訪問陣列會是n i param arr 陣列元素 param s 開始位置 0 pa...
堆排序 堆排序優化 索引堆排序
堆排序 堆排序優化 索引堆排序 注 堆排序 索引堆排序 都是不穩定的排序。注 索引最大堆排序有誤!有沒有大神可以指點一二?1 堆 所有元素 都從索引0開始 父親結點索引 i 左孩子結點索引 2i 1 右孩子結點索引 2i 2 左後乙個非葉子結點索引 n 1 2 用於構建堆,從最後乙個非葉子結點索引開...
堆排序 堆排序優化 索引堆排序
堆排序 堆排序優化 索引堆排序 注 堆排序 索引堆排序 都是不穩定的排序。注 索引最大堆排序有誤!有沒有大神可以指點一二?1 堆 所有元素 都從索引0開始 父親結點索引 i 左孩子結點索引 2i 1 右孩子結點索引 2i 2 左後乙個非葉子結點索引 n 1 2 用於構建堆,從最後乙個非葉子結點索引開...