堆排序(C 的實現)

2021-10-04 12:08:02 字數 840 閱讀 9346

#includeusing namespace std;

//堆排序演算法的步驟:

//1、把無序陣列構建成二叉堆。需要從小到大排序,則構建成最大堆;否則,構建成最小堆。

//2、迴圈刪除堆頂元素,替換到二叉堆的末尾,調整堆產生新的堆頂。

//"下沉"調整

void downadjust(int array,int parentindex,int length)

//如果父結點大於任何乙個孩子的值,則直接跳出

if(temp>=array[childindex])

break;

//無需真正交換,單向賦值即可

array[parentindex]=array[childindex];

parentindex=childindex;

childindex=2*childindex+1;

} array[parentindex]=temp;

} void printheap(int array,int length)

cout<<"建成的堆是:";

printheap(array,length);

//2、迴圈刪除堆頂元素,移到集合尾部,調整堆產生新的堆頂

for(int i=length-1;i>0;i--)

} int main()

; int length=sizeof(array)/sizeof(array[0]);

heapsort(array,length);

cout

return 0;

}

c 堆排序的實現

今天重溫了一下各大排序。打算寫一下堆排序,首先要了解它能幹什麼,有什麼區別,定位,怎麼實現 1.能幹什麼 對資料進行排序。廢話了 2.和別的排序有什麼區別 比插入,冒泡,選擇排序效率高,但是在效能低於快排,它屬於不穩定排序 3.定位 適合於大量的資料的排序。時間複雜度為o nlgn 即使在最好和最差...

堆排序的C實現

這幾天有點牴觸情緒,看過了快速排序還有一些別的東西,但是一點都不想寫有點複雜的 0 0拖到了今天終於寫了前幾天就應該自己寫一下的堆排序,完全用c語言寫的,下面把 貼一下。很多地方寫得並不好,不過已經經過了測試,可以正確執行。1 堆排序 2 void percolatedown int a,int i...

c 實現堆排序

include include include using namespace std 對比枝節點和左右子節點,將比較大的節點放置於枝節點 template int heapadjust t t,int i,int size if rightchild size t rightchild t max...