堆排序 维护最大堆 创建最大堆 排序最大堆
2015-07-14 11:26
288 查看
/* 函数:堆排序 创建最大堆 维护最大堆 排序最大堆 通过数组存储二叉树 时间:15.7.14 Jason Zhou 热爱你所写下的程序,他是你的伙伴,而不是工具. */ #include<iostream> using namespace std; //交换两个元素 int swap_data(int &a,int &b) { int tmp=a; a=b; b=tmp; return 0; } //维护堆的性质 int max_heapify(int arr[],int i,int len) { //和子节点的最大值进行比较.比最大值大,不交换.否则和最大值交换 int l=2*i+1; int r=2*i+2; int largest=i; if (l<=len && arr[l]>arr[i]) { largest=l; } else { largest=i; } if (r<=len && arr[r]>arr[largest] ) { largest=r; } if (largest!=i) { swap_data(arr[i],arr[largest]); max_heapify(arr,largest,len); } return 0; } //建队过程 int build_max_heap(int a[],int len) { for (int i=(len-1)/2;i>=0;i--) { max_heapify(a,i,len-1); } return 0; } //堆排序 int heap_sort(int arr[],int len) { //首先创建最大堆 build_max_heap(arr,len); for (int i=(len-1);i>0;i--) { swap_data(arr[0],arr[i]);//每次将最大值换到最后,然后让 arr[0..i-1] 构建最大堆 max_heapify(arr,0,i-1); } return 0; } int main() { int data[13]={8,5,4,6,13,7,1,9,12,11,3,10,2}; int len=sizeof(data)/sizeof(data[0]); cout<<"原始数据"<<endl; for (int i=0;i<len;i++) { cout<<data[i]<<" "; } cout<<endl; build_max_heap(data,len);//创建最大堆 cout<<"创建最大堆"<<endl; for (int i=0;i<len;i++) { cout<<data[i]<<" "; } cout<<endl; heap_sort(data,len); cout<<"堆排序"<<endl; for (int i=0;i<len;i++) { cout<<data[i]<<" "; } cout<<endl; return 0; }
相关文章推荐
- CentOS 6.6 编译、安装xrdp
- manpages
- alloc new copy以外的对象如何释放
- 我对Linux 权限管理的学习
- LVS+Keepalived 网站服务群集
- LVS+Keepalived 网站服务群集
- linux 下如何打开core dump文件开关
- Linux:ssh远程执行命令并自动退出
- Linux获取当前时间
- git入门-linux下配置git
- linux下C获取系统时间的方法
- linux 批量清除tomcat日志
- nginx支持ssi使用../
- odoo8 pycharm debug 遇到的openerp.service.server: Evented Service (longpolling) running on 0.0.0.0:8072
- 访问一个网站需要那几个协议?
- 安装openstack 时 遇见的一些问题及解决方法!
- OpenCV生成标定图
- 网曝CNZZ统计工具疑似出卖用户数据
- linux中的source、sh、bash、./命令
- hbase shell基础和常用命令详解