9 7 堆排序基礎知識準備

2021-09-28 22:56:54 字數 922 閱讀 8448

堆排序基礎知識: 

#include //堆排序

//因為堆是一棵完全二叉樹,固可用陣列來表示

const int maxn=100;

int heap[maxn],n=10;//heap 為堆,n為元素個數

//堆由上向下調整:將每個結點v與其孩子比較,若有比其大的,則交換他們的位置

//直到沒有比他大的或沒有孩子結點

//對heap陣列在[low,high]範圍下進行向下調整

//其中low為欲調整結點的陣列下標,high一般為堆的陣列的最後乙個元素的陣列下標

void downadjust(int low,int high)

//如果孩子中最大的權值比欲調整結點i大

if(heap[j]>heap[i])

else

break;//孩子的權值均比欲調整結點小,調整結束

}//建堆:由於完全二叉樹的葉子結點為n/2向上取整,因此陣列下標在[1,n/2]範圍內的結點都是非葉結點。

//於是可以從n/2的位置倒著列舉結點,因為每調整完乙個結點,權值最大的結點就會在根結點的位置,這樣可以保證每個結點都是以其為根的子樹中權值最大的結點

void createheap()

//如果要刪除最大元素(堆頂)並讓其保持堆的結構,只需讓最後乙個元素覆蓋堆頂元素,然後對根結點調整即可

//刪除堆頂元素

void deletetop()

//往堆中新增元素,將元素新增至陣列最後,然後向上調整

void upadjust(int low,int high)

else

break;

} }//新增元素x

void insert(int x)

//堆排序

void heapsort()

}

基礎知識 之 堆排序(heap sorting)

sorting 比較好的排序演算法可以把時間複雜度控制在o n log2n 最糟的情況是o n2 應該將sort當作一項基礎處理,因為對於很多問題,當其資料變成sorted items時,解決起來會很容易。stable sorting 對於key相同的元素,有時我們需要保持它們原先的順序。但不幸的是...

面試基礎知識準備

影象基礎知識 1.常用的影象空間。2.簡述你熟悉的聚類演算法並說明其優缺點。3.請描述以下任一概念 sift surf lda pca 4.請說出使用過的分類器和實現原理。5.random forest的隨機性表現在 6.graph cut的基本原理和應用。7.gmm的基本原理和應用。8.用具體演算...

堆的基礎知識

堆也可以說是乙個完全二叉樹,就是除了最底層的,其它層是滿的,既然我們可以用完全二叉樹來表示乙個堆,那麼我們這裡就採用陣列結構的二叉樹來闡述堆的性質。假設在這裡我們用陣列a表示堆,a i 表示堆裡面的第i個元素,於是我們通過二叉樹的性質可知 就如下圖表現所示 小優化 我們知道在計算機裡面做乘法和除法是...