您的位置:首页 > 其它

HDU 1040(As Easy As A+B) 归并排序练习

2015-01-15 14:57 441 查看
练习归并排序。

代码如下:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

int array[1001];
int temp[1001];
void Merge(int array[],int start,int mid,int end,int temp[])
{
int i,j,k,m,n;
i=start,m=mid;
j=mid+1,n=end;
k=0;
while(i<=m && j<=n)
{
if(array[i]<=array[j])
{
temp[k]=array[i];
i++;
k++;
}
else
{
temp[k]=array[j];
j++;
k++;
}
}
while(i<=m)
{
temp[k]=array[i];
i++;
k++;
}
while(j<=n)
{
temp[k]=array[j];
j++;
k++;
}
for(i=start,j=0;i<=end;i++,j++)
{
array[i]=temp[j];
}//更新合并后 array
}
void Merge_Sort(int array[],int start,int end,int temp[])
{
int mid;
if(start<end)
{
mid=(end+start)/2;
Merge_Sort(array,start,mid,temp);//前半部分
Merge_Sort(array,mid+1,end,temp);//后半部分分治排序
Merge(array,start,mid,end,temp);//最后前后合并  完成排序
}
}
int main()
{
int n,i;
int T;
while(scanf("%d",&T)!=EOF)
{
while(T--)
{
memset(array,0,sizeof(array));
memset(temp,0,sizeof(temp));
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&array[i]);
}
Merge_Sort(array,0,n-1,temp);
for(i=0;i<n-1;i++)
printf("%d ",array[i]);
printf("%d\n",array[n-1]);
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  归并排序