堆排序主要是利用了堆的性質,對於大頂堆:堆中的每個節點的值都不小於它的孩子節點的值,詳細可參考我的另一篇部落格那麼大頂堆的堆頂元素就是當前堆中所有元素中最大的。
利用這個性質,進行如下操作,則可以得到乙個有序序列:
將待排序的n個元素乙個乙個插入堆中,那麼此時堆頂元素就是所有元素中最大的
將堆頂元素取出,剩下的n-1個元素組成新的堆,新堆的堆頂元素是當前堆中元素中最大的,也就是所有元素中第二大的。
將堆頂元素取出,剩下的n-2個元素組成新的堆,新堆的堆頂元素是當前堆中元素中最大的,也就是所有元素中第三大的。
. . . .
直到所有元素取出,此時所有取出元素序列就是乙個從大到小的有序序列。
大頂堆的實現
#ifndef maxheap_h
#define maxheap_h
template
class maxheap
;//-------建構函式初始化-------
template
maxheap::maxheap(int size)
else }
//-------析構函式釋放空間-------
template
maxheap::~maxheap()
//--------判斷堆是否為空-------
template
bool maxheap::isempty()
//---------獲取最大元素----------
template
t maxheap::top()
//-------插入操作-----
template
void maxheap::push(t item)
heap[currentnode]=item; //插入元素
}}//-----刪除操作-------
template
void maxheap::pop()
}heap[ currentnode]=last;
}}#endif
堆排序實現
#include"maxheap.h"
#include
using
namespace
std;
int main()
; for(int i=0;i<5;i++)
for(int i=0;i<5;i++)
cout
<
for(int i=0;i<5;i++)
cout
<
for(int i=4;i>=0;i--)
cout
return
0;}
【結果】
排序演算法之(7) 堆排序
堆排序 heap sort 就是利用堆 假設利用大頂堆 進行排序的方法。它的基本思想是,將待排序的序列構造成乙個大頂堆。此時,整個序列的最大值就是堆頂的根結點。將它移走 其實就是將其與堆陣列的末尾元素交換,此時末尾元素就是最大值 然後將剩餘的n 1個序列重新構造成乙個堆,這樣就會得到n個元素中的次小...
排序演算法之(7) 堆排序
堆排序主要是利用了堆的性質。對於大頂堆 堆中的每乙個節點的值都不小於它的孩子節點的值,具體可參考我的還有一篇部落格那麼大頂堆的堆頂元素就是當前堆中全部元素中最大的。利用這個性質。進行例如以下操作,則能夠得到乙個有序序列 將待排序的n個元素乙個乙個插入堆中,那麼此時堆頂元素就是全部元素中最大的 將堆頂...
排序演算法之(7) 堆排序
堆排序主要是利用了堆的性質。對於大頂堆 堆中的每乙個節點的值都不小於它的孩子節點的值,具體可參考我的還有一篇部落格那麼大頂堆的堆頂元素就是當前堆中全部元素中最大的。利用這個性質。進行例如以下操作,則能夠得到乙個有序序列 將待排序的n個元素乙個乙個插入堆中,那麼此時堆頂元素就是全部元素中最大的 將堆頂...