#include
#include
#include
#include
using namespace std;
int a[
100]
,n;//不使用遞迴建立小根堆(效率更高)
void
slidedown
(int i,
int n)
//當左節點的值大於父節點時,不做更改
else
//如果右節點存在且右節點的值小於父節點(這裡的父節點是已經和左節點比過大小後的父節點),
//將右節點的下標賦給t
if(i*2+
1<=n && a[i*2+
1])//當父節點本身就是三個節點中的最小值時,跳出迴圈
if(t==i)
//當t值有所變化時(也就是原來的父節點並不滿足小根堆條件時)
else}}
//使用遞迴建立小根堆 (效率低)
//void slidedown(int i,int n)
//當左節點的值大於父節點時,不做更改
// else
//如果右節點存在且右節點的值小於父節點(這裡的父節點是已經和左節點比過大小後的父節點),
//將右節點的下標賦給t
// if(i*2+1<=n && a[i*2+1]
// t=i*2+1;
// }
//當t值有所變化時(也就是原來的父節點並不滿足小根堆條件時)
// if(t!=i)
//}//堆排序
void
heap_sort
(int n)
//定義變數儲存陣列長度
int num=n;
for(
int i=
1;i<=n;i++
)printf
("\n");
return;}
intmain()
printf
("\n");
heap_sort
(n);
}
資料結構與演算法 經典排序演算法實現
一 排序演算法 冒泡 選擇 插入 希爾 快速 歸併 堆和計數排序 省略了基數排序和桶排序 以及c語言自帶的排序函式 include include typedef intelementtype void swap elementtype a,elementtype b void bubble sor...
資料結構經典排序 堆排序
堆排序思想 以大頂堆為例 1 先建初始堆,從第乙個非葉子節點開始調整堆為乙個大頂堆,直到整個待排序列成為乙個大頂堆 2 將堆頂元素與堆中的最後乙個元素交換 3 將堆中的最後乙個元素移除堆 4 再次調整待排序列為乙個大頂堆,從堆中的根節點開始比較,比較該節點的左右子節點,將較大的節點值與根節點的值比較...
資料結構與演算法 堆排序
1 堆的性質 堆是一棵完全二叉樹,除最後一層外每層都是滿的 元素個數為2 i 1 根節點為第1層 最後一層如果不滿則只缺少右邊葉結點。如果按照廣度優先,即從上至下,從左至右對節點編號。根節點序號為0,節點i的父節點是 i 1 2,左子節點是2 i 1。最小堆中任意父節點不能比子節點大,最大堆中任意父...