堆排序 维护最大堆 创建最大堆 排序最大堆
来源:互联网 发布:本科生导师制 知乎 编辑:程序博客网 时间:2024/06/14 08:35
/*函数:堆排序创建最大堆维护最大堆排序最大堆通过数组存储二叉树时间:15.7.14Jason 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;}
0 0
- 堆排序 维护最大堆 创建最大堆 排序最大堆
- 堆排序(最大堆)
- 堆排序(最大堆)
- 最大堆 堆排序
- 创建最大(小)堆以及堆排序
- 最大堆和堆排序
- 最大堆与堆排序
- 最大堆实现堆排序
- 堆排序(最大堆)
- 堆排序(最大堆)
- 堆排序(最大堆)
- 最大堆实现堆排序
- 最大堆、最小堆、堆排序
- 最大堆、最小堆、堆排序
- 堆排序:最大堆与最小堆
- 最大堆排序Max_Heapify
- 最大堆排序
- c 最大堆排序
- Android 系统自动重启Bug(高通平台)
- NDK编译问题: Program "ndk-build" is not found in PATH 和 Unable to launch cygpath. Is Cygwin on the path?
- Android百度公交开发(二)———百度地图API之ItemizedOverlay的使用
- [转]ASP.net页面跳转方式比较
- 持续集成自动化(一)_Jenkins安装
- 堆排序 维护最大堆 创建最大堆 排序最大堆
- 如何不做“孬种”程序员
- 常用iOS第三方库以及XCode插件介绍
- 转载并学习 C语言 sizeof函数详解
- hdu5282 最长公共子序列的变形
- H.264中有关句法元素描述子的总结
- MyEclipse新手配置集合
- [转]回发或回调参数无效的解决方法
- 链表逆置For Java