归递排序 T(nlgn)
2015-06-10 20:45
281 查看
主要对数目多的数 拆分再排 总的来说耗时还蛮少的 具体函数的操作看图片
看了一下书 写了一个 感觉不是特别好 毕竟一般调函数sort
看了一下书 写了一个 感觉不是特别好 毕竟一般调函数sort
#include <stdio.h> #include <malloc.h> void bin(int *a,int *b,int start,int mid,int end) { int k=0; int i=start,j=mid,m=mid+1,n=end; while(i<=j && m<=n) { if(a[i]<=a[m]) b[k++]=a[i++]; else b[k++]=a[m++]; } //对两个数列的头 看哪个大 直到一个结束 然后另外一个剩下的就接进来 while(i<=j) b[k++]=a[i++]; while(m<=n) b[k++]=a[m++]; for(i=0;i<k;i++) a[start+i]=b[i]; //将排好序的序列 替代原数列的数 } void gui(int *a,int *b,int start,int end) { if(start<end) { int mid=(start+end)/2; gui(a,b,start,mid); //拆分成前半列 gui(a,b,mid+1,end); //后半列 直接到剩下一个 然后一个一个接起来排 bin(a,b,start,mid,end); //将两序列排序 } } int main() { int a[]={6,3,11,55,33,767,35,8,62,70,23,10}; int *b; b=(int *)malloc(sizeof(int)*12); //申请空间 gui(a,b,0,11); for(int i=0;i<12;i++) printf("%d ",a[i]); return 33; }
<img src="http://img.blog.csdn.net/20150612092001541?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQTg1Mjg1Mjg1Mjg1Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" style="font-family: Arial, Helvetica, sans-serif;" alt="" />
相关文章推荐
- 我的第一个API程序-VS2013
- [安卓]手机管家(一)splash
- 微软100题(74)数组中超过长度一半的数字
- 常见的MySQL Replication Error
- java匿名内部类
- [LeetCode]Integer to Roman整数转罗马数字
- Spark学习笔记:(一)入门 glance
- 无法连接mysql,请检查mysql是否已启动及用户密码是否设置正确
- [.net程序员必看]微软新动向之Android和IOS应用 visual studio 2015 Cordova[原创]
- 包含min函数的栈
- 获取导航栏,状态栏,标签栏的高度
- POJ 2125 Destroying The Graph 二分图最小点权覆盖 最小割
- Chrome rem bug
- 高程拾取器App上线
- 基于FPGA的双口RAM设计方法
- HDU 4998
- Android IllegalStateException: Fragment not attached to Activity
- 模式识别:k-均值聚类算法的研究与实现
- MySQL 数据(数据库)迁移
- HDU 1013 Digital Roots