func.h
#include
#include
#include
#define n 10
//用巨集的方法寫乙個交換方法
#define swap(a,b)
void
print
(int*)
;void
arr_heap
(int*)
;
func.c
#include
"func.h"
//列印函式實現
void
print
(int
*a)printf
("\n");
}//構造大頂堆函式實現
void
heap_max
(int
* a,
int i,
int size)
if(a[dad]
)else}}
//堆排序 空間複雜度為o(1)
void
arr_heap
(int
*a)//頂點和末端點交換,破壞了大頂推
swap
(a[0
],a[n-1]
);//重新調整為大頂堆
for(i=n-
1;i>
0;i--
)}
main.c
#include
"func.h"
intmain()
begin=
time
(null);
//快速排序
print
(a);
arr_heap
(a);
end=
time
(null);
printf
("use time=%d\n"
,end-begin)
;print
(a);
system
("pause");
}
堆排序實現
今天抽空寫了個堆排序的演算法,廢話不多說,直接上源 include include includeusing namespace std define maxsize 6 void print int a,int size maxsize void percolate up int a,int si...
堆排序實現
1 堆排序演算法描述 1 定義 n個關鍵字序列kl,k2,kn稱為 heap 當且僅當該序列滿足如下性質 簡稱為堆性質 1 ki k 2i 且ki k 2i 1 1 i n 2 當然,這是小根堆,大根堆則換成 號。k i 相當於 二叉樹的非 葉子結點,k 2i 則是左子節點,k 2i 1 是右子節點...
實現堆排序
堆排序是在程式設計中經常用到的東西,在c 的stl底層裡面有make heap,push heap,pop heap 和 sort heap四個介面函式,我們用到的最多的是stl中的priority queue,其中的底層也是利用前面幾個函式實現的。下面我們就自己實現以下堆排序,主要包括調整堆結構,...