部分有序使用堆排序效率較高, 基本有序使用插入排序或氣泡排序效率較高
#include
#include
//調整函式要求除了要調整的點,都要滿足堆的性質
void maxheapify(int a,int i,int length)
else
//取父節點、左右節點最大值
if(right <=length-1 && a[right]>a[largest])
largest=right;
if(largest!=i)
}void buildmaxheap(int a,int length)
}int main()
; int temp=0;
buildmaxheap(a,sizeof(a)/sizeof(int));
int i=0;
//遍歷陣列
for(i=sizeof(a)/sizeof(int)-1;i>0;--i)
i=0;
for(i=0;iprintf("%d ",a[i]);
return
0;}
演算法導論 堆排序實現
我建立了乙個heap的資料結構,而不是像stl那樣使用函式解決堆排序,當然stl的比較優雅一點,我只是提供第二個思路 ifndef heap sort h define heap sort h include include include ifdef debug include endif deb...
演算法導論 堆排序
堆排序演算法 heapsort max heapify過程,其執行時間為 lg n 是保持最大堆性質的關鍵 build max heap過程,以線性時間執行,可以在無序的輸入陣列基礎上構造出最大堆 heapsort過程,執行時間 n lg n 對乙個陣列原地進行排序 heapsort過程 1 建最大...
演算法導論 堆排序習題
1.怎樣利用最大 小 堆構成的優先實現先進先出佇列或者棧 開始看這道題沒有弄清以什麼優先,原來是先進先出佇列只要保證先進來優先順序高,棧保證後進來優先順序高,然後每次彈出堆頂元素即可 2.如何在logn時間裡刪除乙個元素 思路和如何在堆中增加乙個元素是一樣的,因為堆要的形狀要保證是一顆完全二叉樹,決...