c 堆排序的實現

2021-06-20 21:11:41 字數 1133 閱讀 9552

今天重溫了一下各大排序。

打算寫一下堆排序,首先要了解它能幹什麼,有什麼區別,定位,怎麼實現

1.能幹什麼 

對資料進行排序。(廢話了)

2.和別的排序有什麼區別

比插入,冒泡,選擇排序效率高,但是在效能低於快排,它屬於不穩定排序

3.定位

適合於大量的資料的排序。時間複雜度為o(nlgn)即使在最好和最差情況下。

4.怎麼實現

a.第一步了解他的原理,就是用陣列模擬乙個二叉樹來進行移動資料

排序的話一般是用最大堆。 最大堆的概念為它的子節點數值<=父節點的數值

了解了這個概念後,接著。。

b.陣列轉換成二叉樹的模型

我在實際運算中把它看成是二叉樹,下圖圖就是這個模型

陣列為a[6] = ; c.

如何獲得排序好的陣列

c1.建立最大堆

c1.我們每次都是把最大的拿走(也就是最頂上的元素和最尾的元素交換)

c3.倒回c1繼續建立最大堆(一直迴圈1,2)

接下來就是**c1的實現

- -,由於我寫了半天的**不小心被我關了,沒儲存。。我先用網上的。

/*堆排序(大頂堆) 2011.9.14*/ 

#include #includeusing namespace std;

void heapadjust(int *a,int i,int size) //調整堆

if(rchild<=size&&a[rchild]>a[max])

if(max!=i)

}

}void buildheap(int *a,int size) //建立堆

} void heapsort(int *a,int size) //堆排序

{ int i;

buildheap(a,size);

for(i=size;i>=1;i--)

{//cout<0)

{int i;

for(i=1;i<=size;i++)

cin>>a[i];

heapsort(a,size);

for(i=1;i<=size;i++)

cout<

堆排序(C 的實現)

includeusing namespace std 堆排序演算法的步驟 1 把無序陣列構建成二叉堆。需要從小到大排序,則構建成最大堆 否則,構建成最小堆。2 迴圈刪除堆頂元素,替換到二叉堆的末尾,調整堆產生新的堆頂。下沉 調整 void downadjust int array,int paren...

堆排序的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...