堆排序(Heap Sort) java實現

2021-08-31 04:00:22 字數 692 閱讀 7524

學習自嚴蔚敏、吳偉民的《資料結構》-清華大學出版

過於複雜,理解的不夠透徹,只存放**部分

1、建立堆:

/**

* 由於使得陣列元素遞增排序,所以先建乙個「大頂堆」,即先選得乙個關鍵字為最大的記錄並與序列中最後乙個記錄交換

* 所以,每次訪問陣列會是n-i

* @param arr-陣列元素

* @param s-開始位置-0

* @param m-結束位置-逐漸減1(從陣列長度開始)

*/public static void heapadjust(int arr, int s, int m)

// 若比第乙個結點(根結點)小,則結束本次迴圈

if (!(rc < arr[j]))

// 說明比根結點大,將至向前移動

arr[s] = arr[j];

// 記錄當前空出的結點位置

s = j;

} // 將空出結點的位置存放之前的根結點

arr[s] = rc;

}

2、通過上述方法將陣列排序(遞增)

public static void heapsort(int arr) 

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

}

堆排序heapSort java實現

首先,堆分為兩種 大根堆和小根堆。均可看成是一棵完全二叉樹的順序儲存結構。對於大根堆,樹中任一節點的值均不小於其孩子節點的值 同樣,對於小根堆,樹中任一節點的值均不大於其孩子節點的值。對於樹中任一節點,若其下標為 i 則該節點的左右孩子的下標為 2i 1 和 2i 2。則對於任一節點n,其父節點的下...

堆排序 堆排序優化 索引堆排序

堆排序 堆排序優化 索引堆排序 注 堆排序 索引堆排序 都是不穩定的排序。注 索引最大堆排序有誤!有沒有大神可以指點一二?1 堆 所有元素 都從索引0開始 父親結點索引 i 左孩子結點索引 2i 1 右孩子結點索引 2i 2 左後乙個非葉子結點索引 n 1 2 用於構建堆,從最後乙個非葉子結點索引開...

堆排序 堆排序優化 索引堆排序

堆排序 堆排序優化 索引堆排序 注 堆排序 索引堆排序 都是不穩定的排序。注 索引最大堆排序有誤!有沒有大神可以指點一二?1 堆 所有元素 都從索引0開始 父親結點索引 i 左孩子結點索引 2i 1 右孩子結點索引 2i 2 左後乙個非葉子結點索引 n 1 2 用於構建堆,從最後乙個非葉子結點索引開...