描述
给定输入排序元素数目n和相应的n个元素,写出程序,利用内排序算法中两路合并排序算法进行排序,并输出排序最后结果的相应序列。
输入
共两行,第一行给出排序元素数目n,第二行给出n个元素,1≤n≤100000,每个元素值范围为 [0,100000)
输出
一行,输出排序结果。
样例输入
7
48 36 68 72 12 48 2
样例输出
2 12 36 48 48 68 72
#include <iostream> #define N 100000 using namespace std; void merge(int a[],int i1,int j1,int i2,int j2) { int *temp=new int[j2-i1+1]; int i=i1,j=i2,k=0; while(i<=j1&&j<=j2) if(a[i]<=a[j]) temp[k++]=a[i++]; else temp[k++]=a[j++]; while (i<=j1) temp[k++]=a[i++]; while (j<=j2) temp[k++]=a[j++]; for(i=0;i<k;i++) a[i1++]=temp[i]; delete[] temp; } void mergesort(int a[],int n) { int i1,j1,i2,j2; int size=1; while(size<n) { i1=0; while(i1+size<n) { i2=i1+size; j1=i2-1; if(i2+size-1>n-1) j2=n-1; else j2=i2+size-1; merge(a,i1,j1,i2,j2); i1=j2+1; } size*=2; } } int main() { int n; int a[N]={0}; cin>>n; for(int k=0;k<n;k++) cin>>a[k]; mergesort(a,n); for(int kk=0;kk<n-1;kk++) cout<<a[kk]<<" "; cout<<a[n-1]<<endl; return 0; }