您的位置:首页 > 其它

分治法之合并排序(C实现)

2015-11-04 13:43 141 查看
#include <stdio.h>

void merge(int a[],int p,int q,int r)
{
int n1=q-p+1,n2=r-q;
int b1[n1];
int b2[n2];
int i=0,j=0,temp1=p,temp2=q;
while(p<=q)
{
b1[i]=a[p];
++i;
++p;
}
while(q+1<=r)
{
b2[j]=a[q+1];
++j;
++q;
}

p=temp1;q=temp2;
i=0,j=0;
while(p<=r)
{
if(i==n1)
{
a[p]=b2[j];
++j;
}
else if(j==n2)
{
a[p]=b1[i];
++i;
}

else if(b1[i]<b2[j])
{
a[p]=b1[i];
++i;
}
else
{
a[p]=b2[j];
++j;
}
++p;
}
}

void merge_sort(int a[],int p,int r)
{
int q=0;
if(p<r)
{
q=(p+r)/2;
merge_sort(a,p,q);
merge_sort(a,q+1,r);
merge(a,p,q,r);
}
}

int main()
{
int i, a[100];
srand(time(0));
for ( i = 1; i < 101; ++i ){
a[i-1] = rand() % 1001;
printf( "%3d ", a[i-1] );
if(i%15==0) printf("\n");
}
printf("\n\n");
SelectionSort(a, 100);
for ( i = 1; i < 101; ++i ){
printf( "%3d ", a[i-1] );
if(i%15==0) printf("\n");
}
getch();
return 0;
}

运行效果图

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: