用法區別:
由以上特點我們可以得到堆的特性:
將待排序序列,構成乙個大頂堆;此時,最大值為根節點(索引=0)
將最大值與末尾元素交換;
將剩餘的len-1個元素,繼續構造成乙個大頂堆;
重複以上2~3步驟、
找到那個「最深」「最右」的非葉子節點;
從右至左,從上至下構建大頂堆,呼叫adjustheap()
方法;
adjustheap(int arr, int i, int len)
的作用:
呼叫adjustheap()
方法的條件:
adjustheap()
方法的條件分析:
那麼,具體來說adjustheap()
方法是如何發揮作用的呢?
下面借助乙個例子來幫助大家理解該方法的作用。
完整:
private
void
heapsort
(int
arr)
//2、迴圈:
// a.更換最大值(索引=0)和末尾元素(選擇排序)
// b.調整前面len-1的結構為大頂堆
for(
int i = len-
1; i >
0; i --
)// 調整完畢!
}/**
* 將符合條件的,以 i 為根節點的,長度為length的結構調整為堆!!
** @param arr 陣列
* @param i 要調整的根節點
* @param length 要調整的陣列長度
*/private
void
adjustheap
(int
arr,
int i,
int length)
if(arr[k]
> temp)
else
} arr[i]
= temp;
}
排序 堆排序(heapSort)
時間複雜度 o nlog n 空間複雜度 o 1 不穩定 把此序列對應的二維陣列看成乙個完全二叉樹。那麼堆的含義就是 完全二叉樹中任何乙個非葉子節點的值均不大於 或不小於 其左,右孩子節點的值。由上述性質可知大頂堆的堆頂的關鍵字肯定是所有關鍵字中最大的,小頂堆的堆頂的關鍵字是所有關鍵字中最小的。因此...
堆排序練習(Heap Sort
一.目的以及背景知識 進行堆排序練習,掌握堆的構建與輸出。堆定義 對於序列a 1,n 對於任意i都有a i a 2i a i a 2 i 1 則該序列稱為大頂堆或者最大堆。反之則成為最小堆。堆篩選或堆調整 從最後乙個葉子結點開始篩選出該節點的兄弟結點與父節點中最大或最小的元素與父節點交換。建堆演算法...
堆排序(heap sort)總結
以前學資料結構的時候,用的是嚴的書,對於堆這個結構的概念似懂非懂。往往過了一段時間後有不會。現在趁著再次學習資料結構的機會,結合網上的資料整理出自己對堆的理解。二叉堆滿足二個特性 2 每個結點的左子樹和右子樹都是乙個二叉堆 都是最大堆或最小堆 1.堆是完全二叉樹。2.完全二叉樹通常用陣列儲存。3.完...