归并排序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; 
    }
 

posted on 2011-12-07 20:01  怡红公子  阅读(230)  评论(0编辑  收藏  举报