算法分析实验之合并排序
题目描述
这是一个很简单的排序题目. 为了锻炼大家对不同算法的了解,请大家用归并排序法对此题进行解答. 对一组整数数列A[1],A[2],A[3]......A[N]进行排序,按照从小到大的顺序输出.
输入
本题只有一组测试数据,在输入的第一行输入N(表示整数数列的大小)(N < 1000) 接下来N行输入N个整数,每一行一个整数.
输出
对已经排好序的数从小到大依次输出,每两个数之间用两个空格隔开,且每输出10个数换行.
样例输入复制
12 45 545 48 47 44 45 4857 58 57 485 1255 42
样例输出复制
42 44 45 45 47 48 57 58 485 545 1255 4857
#include<iostream> #include<vector> using namespace std; int n; void Merge(int a[],int temp[],int start,int mid,int end) { int i=start,j=mid+1,k=start; while(i!=mid+1&&j!=end+1){ if(a[i]<=a[j]) temp[k++]=a[i++]; else temp[k++]=a[j++]; } while(i!=mid+1) temp[k++]=a[i++]; while(j!=end+1) temp[k++]=a[j++]; for(i=start; i<=end; i++) a[i] = temp[i]; } void Mergesort(int a[],int temp[],int start,int end) { int mid; if(start<end) { mid=start+(end-start)/2; Mergesort(a,temp,start,mid); Mergesort(a,temp,mid+1,end); Merge(a,temp,start,mid,end); } } int main(){ cin>>n; int a[n]; for(int i=0;i<n;i++) cin>>a[i]; int b[n]; Mergesort(a,b,0,n-1); for(int i=0;i<n;i++){ if((i+1)%10==0) cout<<a[i]<<endl; else{ if(i==n-1) cout<<a[i]<<endl; else cout<<a[i]<<" "; } } return 0; }