堆排序在八大排序演算法中屬於選擇排序,她利用的是堆這種資料結構來構建的排序演算法,堆分為大頂堆、小頂堆,根節點的數值要麼是最大的,要麼是最小的,堆排序最主要的兩個操作是建堆和調整堆兩個操作。
public
static
void
downadjust
(int[
] array, int parentindex, int length)
// 如果父節點小於任何乙個孩子的值,直接跳出
if(temp >= array[childindex]
)break
;//無需真正交換,單向賦值即可
array[parentindex]
= array[childindex]
; parentindex = childindex;
childindex =
2* childindex +1;
} array[parentindex]
= temp;
}public
static
void
heapsort
(int[
] array)
system.out.
println
(arrays.
tostring
(array));
// 2.迴圈刪除堆頂元素,移到集合尾部,調節堆產生新的堆頂。
for(int i = array.length -
1; i >
0; i--
)}
堆排序的時間複雜度為o(nlogn)與快速排序一樣,空間複雜度為o(1),構建堆的時間複雜度為o(nlogn),需要進行n/2次迴圈,每一次呼叫downadjusut方法,調整堆和構建堆的時間複雜度是一樣的,這兩個方法存在於兩個不同的迴圈中,因此是並列的關係,最後得到堆排序的時間複雜度。
堆排序和快速排序一樣都是屬於不穩定排序,,但是不會出現想快速排序那樣不穩定的情況,通常使用在相對有序的大資料量下。
什麼是歸併排序?
帶你秒懂堆排序
首先我們要明確堆並非一種資料結構,所謂堆排序其實是對陣列進行排序。首先,我們可以將陣列看作乙個完全二叉樹,陣列第乙個元素a 0 即為二叉樹根節點,而後我們需要了解一些完全二叉樹的基礎概念 完全二叉樹最後乙個非葉子節點索引為 元素個數 2 1。記住這個以後我們就可以進行堆排序了,堆排序的思路比較簡單,...
了解了解堆排序的順序儲存
a 構建乙個堆分為兩步 1 建立一棵完全二叉樹 2 調整為乙個堆 b 演算法描述 建立一棵完全二叉樹 while 有雙親 c 時間複雜度為 o nlogn 空間複雜度為 o 1 是不穩定排序!auther yangchao date 2019 7 31 堆排序思想 完全二叉樹的定義 前 h 1 層為...
帶你了解make menuconfig
帶你了解make menuconfig 在嵌入式領域當中,在配置核心的時候會有很多配置方法,比如說make config 基於文字的為傳統的配置介面 make oldconfig 如何只想在原來核心配置的基礎上修改一部分,則會省去很多麻煩 make xconfig 基於圖形視窗模式的配置介面,xwi...