关于堆排序的了解和实现
2015-06-30 01:09
363 查看
//编写文件:HEAPIFY.H //编写日期:2015年6月30日 //版本号:1.0 #ifndef HEAPIFY #define HEAPIFY 1 int 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); } }
相关文章推荐
- java集群优化——初探多线程
- 【HDOJ】1695 GCD
- shell学习之路:流程控制(for)
- 61 Hadoop Hadoop学习路线图
- 移动app接口编程技术-学习实现之PHP进阶 类与对象
- IT男的”幸福”生活"续8
- 字符串转unsigned int函数-C语言实现
- Material Design控件使用(四)
- NWERC2013题解
- java初学1
- js学习小总结
- [图像]张正友论文翻译(2)
- wordpress 4.2版造成的顶部菜单无法打开解决办法
- LeetCode Search a 2D Matrix
- Android_布局_文章列表
- ftp桥接到http服务
- 关于文件、目录操作的函数
- Python学习笔记 - map reduce
- Python学习笔记 - map reduce
- ubuntu-通配符