今天重溫了一下各大排序。
打算寫一下堆排序,首先要了解它能幹什麼,有什麼區別,定位,怎麼實現
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...