关于堆排序的了解和实现

来源:互联网 发布:深圳java外包公司 编辑:程序博客网 时间:2024/05/20 18:16
//编写文件:HEAPIFY.H//编写日期:2015年6月30日//版本号:1.0#ifndef HEAPIFY#define HEAPIFY 1int parent(int i);int left(int i);int right(int i);//实现最大堆void max_heapify(int A[], int i);void build_max_heap(int A[]);void max_heapsort(int A[]);//实现最小堆void min_heapify(int A[], int i);void build_min_heap(int A[]);void min_heapsort(int A[]);void move(int& a,int& b);#endif
源码实现最大堆以及最小堆及排序
//编写文件:HEAPIFY.CPP//编写日期:2015年6月30日//版本号:1.0#include"HEAPIFY.h"int parent(int i){return i/2;}int left(int i){return 2*i;}int right(int i){return 2*i+1;}void move(int& a,int& b){int temp;temp=a;a=b;b=temp;}//实现最大堆void max_heapify(int A[], int i){int l=left(i);int r=right(i);int lagest;if(l<A[0]&&A[l]>A[i]){lagest=l;}else{lagest=i;}if(r<A[0]&&A[r]>A[lagest]){lagest=r;}if(i!=lagest){move(A[i],A[lagest]);max_heapify(A,lagest);}}void build_max_heap(int A[]){for(int i=A[0]/2;i>=1;i--){max_heapify(A,i);}}void max_heapsort(int A[]){build_max_heap(A);for(int i=A[0];i>=2;i--){move(A[i],A[1]);A[0]--;max_heapify(A,1);}}//实现最小堆void min_heapify(int A[], int i){int l=left(i);int r=right(i);int lagest;if(l<A[0]&&A[l]<A[i]){lagest=l;}else{lagest=i;}if(r<A[0]&&A[r]<A[lagest]){lagest=r;}if(i!=lagest){move(A[i],A[lagest]);min_heapify(A,lagest);}}void build_min_heap(int A[]){for(int i=A[0]/2;i>=1;i--){min_heapify(A,i);}}void min_heapsort(int A[]){build_min_heap(A);for(int i=A[0];i>=2;i--){move(A[i],A[1]);A[0]--;min_heapify(A,1);}}

0 0