堆排序實現

2021-10-06 10:32:29 字數 1080 閱讀 2822

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,其中的底層也是利用前面幾個函式實現的。下面我們就自己實現以下堆排序,主要包括調整堆結構,...