归并排序Merge
#include<iostream>
#include<fstream>
#define N 10000
using namespace std;
ifstream fin("Merge_sort.in");
ofstream fout("Merge_sort.out");
int a[N],n;
void Init(){
int i;
fin>>n;
for(i=1;i<=n;i++)
fin>>a[i];
}
void Merge(int i,int mid,int j){
int b[N],l,t,k;
t=i;k=mid+1;l=1;
while(t<=mid&&k<=j){
if(a[t]<a[k]) {b[l]=a[t];t++;}
else {b[l]=a[k];k++;}
l++;
}
while(t<=mid) {b[l]=a[t];l++;t++;}
while(k<=mid) {b[l]=a[k];l++;k++;}
for(t=1;t<l;t++)
a[i+t-1]=b[t];
}
void Mergesort(int i,int j){
if(i>=j) return;
int mid=(i+j)/2;
Mergesort(i,mid);
Mergesort(mid+1,j);
Merge(i,mid,j);
}
int main()
{
int i;
Init();
Mergesort(1,n);
for(i=1;i<=n;i++)
fout<<a[i]<<" ";
return 0;
}