#include <iostream> #include<stdlib.h>//引入malloc using namespace std; void Merge(int *a,int p,int q,int r)//p为起始,q为中,r为末 { int *left=NULL; int *right=NULL; int n1=q-p+1; int n2=r-q; int i; int j; left=(int *)malloc(sizeof(int)*(n1)); right=(int *)malloc(sizeof(int)*(n2)); for(i=0;i<n1;i++) { left[i]=a[p+i]; } for(j=0;j<n2;j++) { right[j]=a[q+1+j]; } i=j=0; int k=p; while(i<n1&&j<n2) { if(left[i]<=right[j]) { a[k++]=left[i++]; } else { a[k++]=right[j++]; } } for(;i<n1;i++) { a[k++]=left[i]; } for(;j<n2;j++) { a[k++]=right[j]; } } void Mergesort(int *a,int p,int r) { int q; if(p<r) { q=(int)((p+r)/2); Mergesort(a,p,q); Mergesort(a,q+1,r); Merge(a,p,q,r); } } int main() { int n=5; int a[10]; cout<<"Input Num"<<endl; for(int i=0;i<n;i++) { cin>>a[i]; } Mergesort(a,0,n-1); for(int j=0;j<n;j++) { cout<<a[j]<<" "; } return 0; }
原文:http://www.cnblogs.com/oneface/p/4858279.html