堆排序heapSort java實現

2021-07-06 07:54:05 字數 952 閱讀 8681

首先,堆分為兩種:大根堆和小根堆。均可看成是一棵完全二叉樹的順序儲存結構。

對於大根堆,樹中任一節點的值均不小於其孩子節點的值;同樣,對於小根堆,樹中任一節點的值均不大於其孩子節點的值。

對於樹中任一節點,若其下標為 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 用於構建堆,從最後乙個非葉子結點索引開...