演算法導論堆排序實現

2021-08-03 03:00:23 字數 589 閱讀 7582

部分有序使用堆排序效率較高, 基本有序使用插入排序或氣泡排序效率較高

#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時間裡刪除乙個元素 思路和如何在堆中增加乙個元素是一樣的,因為堆要的形狀要保證是一顆完全二叉樹,決...