資料結構與演算法(經典排序) 堆排序

2021-10-07 06:39:00 字數 1065 閱讀 8939

#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。最小堆中任意父節點不能比子節點大,最大堆中任意父...