(演算法導論排序演算法部分第乙個就介紹堆排序,也得複習複習。)
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...