您的位置:首页 > 其它

归递排序 T(nlgn)

2015-06-10 20:45 281 查看
主要对数目多的数 拆分再排 总的来说耗时还蛮少的 具体函数的操作看图片

看了一下书 写了一个 感觉不是特别好 毕竟一般调函数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="" />
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: