排序——堆排序
2016-04-14 13:34
225 查看
以下是自己写的堆排序源码,已经测试通过,以后有时间总结,
#include<stdio.h> //堆a,存储在数组a[len]中,根节点下标为i,len为数组长度 //该函数的作用是保持最大堆的性质 void Keep(int *a,int len,int i); void Build(int* a,int len); void Sort(int* a,int len); void Keep(int *a,int len,int i) { int left=2*i+1; int right=2*i+2; int largest=i,temp; if(left<len&&a[left]>a[i]) largest=left; if(right<len&&a[right]>a[largest]) largest=right; if(largest!=i) { temp=a[i]; a[i]=a[largest]; a[largest]=temp; Keep(a,len,largest); } } //建堆:通过一个数组建立最大堆 void Build(int* a,int len) { int i; for(i=len/2-1;i>=0;i--) Keep(a,len,i); } //堆排序 void Sort(int* a,int len) { int temp,i; Build(a,len); for(i=len-1;i>=1;i--) { temp=a[i]; a[i]=a[0]; a[0]=temp; printf("%d %d\t",a[0],a[i]); len--; Keep(a,len,0); } printf("\n"); } int main() { int len=10; int a[len]; for(int i=0;i<len;i++) scanf("%d",&a[i]); Build(a,len); Sort(a,len); for(int i=0;i<len;i++) printf("%d ",a[i]); return 0; }
相关文章推荐
- CSS选择器(三)
- javascript思维导图
- Bugly&友盟&腾讯云分析の小调研
- Ant unless 和condition的用法
- Xshell 码
- MySQL外键约束
- [信安Presentation]一种基于GPU并行计算的MD5密码解密方法
- Linux内存管理剖析
- 最大子序和问题
- CSS选择器(二)
- 【Shell】linux中shell变量$#,$@,$0,$1,$2的含义解释 && set 关键字使用
- oracle 安装
- spring参数传递的问题
- 高效而轻松的sed命令
- 线程
- 折半查找和递归折半查找详解(二分法查找,递归二分法查找)
- 历史返回,若无页面则跳转到指定页面
- CSS选择器(一)
- 121. Best Time to Buy and Sell Stock && 122. Best Time to Buy and Sell Stock II && 123. Best Time to Buy and Sell Stock III && 309. Best Time to Buy and Sell Stock with Cooldown
- 在Linux上自动调整屏幕亮度保护眼睛