堆排序簡單實現

2021-06-05 20:56:22 字數 1064 閱讀 5861

(演算法導論排序演算法部分第乙個就介紹堆排序,也得複習複習。)

wiki(上也有介紹及**實現,基本上都是一樣的。

摘錄堆排序定義如下:

堆排序(heapsort)是指利用堆這種資料結構所設計的一種排序演算法。堆是乙個近似完全二叉樹的結構,並同時滿足堆性質:即子結點的鍵值或索引總是小於(或者大於)它的父節點。

然後實現**如下:

#include #include #include using namespace std;

#define array_size 1000

#define left_child(i) (2 * i)

#define right_child(i) (2 * i + 1)

int data[array_size];

//前提root的左右子樹都是最大堆

//用來平衡最大二叉堆

//找出最大子樹根,然後替換,遞迴

void max_heapify(int data, int root, int heapsize)

else

if (rightchild < heapsize && data[largestchild] < data[rightchild])

if (largestchild != root) }

//構建最大二叉堆

//從倒數第二層開始平衡最大堆即可

void build_max_heap(int data, int heapsize)

}//堆排序

//先構建最大二叉堆,然後再每次把根和最後乙個節點替換,遞迴

void heapsort(int data, int heapsize)

}void printn(int data, int size)

cout << endl;

}void getn(int data, int size)

}int main()

getn(data, size);

heapsort(data, size);

printn(data, size);

}}

堆排序的簡單實現

堆排序 heapsort 是指利用堆積樹 堆 這種資料結構所設計的一種排序演算法,它是選擇排序的一種。可以利用陣列的特點快速定位指定索引的元素。堆分為大根堆和小根堆,是完全二叉樹。大根堆的要求是每個節點的值都不大於其父節點的值,即a parent i a i 在陣列的非降序排序中,需要使用的就是大根...

堆排序《一》 簡單結構堆排序

堆排序 利用最大堆 最小堆完成排序 用陣列儲存,但邏輯結構為 完全二叉樹 heapelem arr 物理結構 邏輯結構 i 3 要調整的結點 j i 2 1 左孩子結點 對 3 7 8 進行判斷,已符合最小堆規則 則不調整 break arr i tmp pos 開始迴圈調整 2位置的 while ...

堆排序實現

今天抽空寫了個堆排序的演算法,廢話不多說,直接上源 include include includeusing namespace std define maxsize 6 void print int a,int size maxsize void percolate up int a,int si...