#include<iostream> using std::cout; using std::cin; using std::endl; void merge(int a[],int b[],int left,int right){ int mid=(left+right)/2; int bc=left; int l=left; int r=mid+1; while(l<=mid && r<=right){ if(a[l]<=a[r]) b[bc++]=a[l++]; else b[bc++]=a[r++]; } while(l<=mid && r>right){ b[bc++]=a[l++]; } while(r<=right && l>mid){ b[bc++]=a[r++]; } } void copy(int a[],int b[],int left,int right){ for(int i=left;i<=right;i++){ b[i]=a[i]; } } void mergesort(int a[],int b[],int left,int right){ if(left<right){ int mid=(left+right)/2; mergesort(a,b,left,mid); mergesort(a,b,mid+1,right); merge(a,b,left,right); copy(b,a,left,right); } } void print(int b[],int size){ for(int i=0;i<size;i++) cout<<b[i]<<" "; cout<<endl; } int main(){ cout<<"请输入需要排序的序列的大小"<<endl; int count=0; cin>>count; cout<<"请输入需要排序的序列"<<endl; int *a=new int[count]; int *b=new int[count]; for(int i=0;i<count;i++) cin>>a[i]; mergesort(a,b,0,count-1); print(b,count); }
|
近期评论