1. 程式人生 > >對n個數用歸併排序

對n個數用歸併排序

#include<iostream> using namespace std; void merge(int a[],int s,int m,int e,int tmp[])//s為開始m為中間e為末尾tmp為額外儲存空間  { int pb=0;int p1=s;int p2=m+1; while(p1<=m&&p2<=e) { if(a[p1]>a[p2]) tmp[pb++]=a[p1++]; else  tmp[pb++]=a[p2++];} while(p1<=m) tmp[pb++]=a[p1++]; while(p2<=e) tmp[pb++]=a[p2++]; for(int i=0;i<e-s+1;i++) a[s+i]=tmp[i];      }

void mergesort(int a[],int s,int e,int tmp[]) { if(s<e) { int m=s+(e-s)/2; mergesort(a,s,m,tmp); mergesort(a,m+1,e,tmp); merge(a,s,m,e,tmp);      }      } int main(){ void merge(int a[],int s,int m,int e,int tmp[]); void mergesort(int a[],int s,int e,int tmp[]); int i,n; cin>>n; int a[n];int b[n]; for(i=0;i<n;i++) cin>>a[i]; mergesort(a,0,n-1,b); for(i=0;i<n;i++)     cout<<a[i]<<" "; return 0; }