问题描述
随机产生一个长度为10的数组a,其中a[i]∈[0,100),使用归并序进行从小到大的排序。
输入描述
本题无输入
输出描述
输出两行数据,其中第一行为未经排序的随机数组,第二行为排序后的数组
参考代码
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void merget(int source[],int copy[],int p,int mid,int r){
int left=p,right=mid+1,insert=p;
while(left<=mid&&right<=r)
{
if(source[left]<=source[right])
copy[insert++]=source[left++];
else copy[insert++]=source[right++];
}
while(left<=mid)copy[insert++]=source[left++];
while(right<=r)copy[insert++]=source[right++];
for(int i=p;i<=r;i++)
source[i]=copy[i];
}
void sort(int source[],int copy[],int p,int r){
if(p<r)
{//重点在于合并
int mid=p+((r-p)>>1);
sort(source,copy,p,mid);
sort(source,copy,mid+1,r);
merget(source,copy,p,mid,r);
}
}
int main(){
int a[10],b[10];
srand((unsigned)time(NULL));
for(int i=0;i<10;i++)
{
a[i]=rand()%100;
printf("%d ",a[i]);
}
printf("\n");
sort(a,b,0,9);
for(int i=0;i<10;i++)
printf("%d ",a[i]);
return 0;
}