一个简单的合并排序,可就是运行不对,着急,在线等!

 #include<iostream>
using namespace std;
template <class T>
void MergeSort(T a[],int left,int right);
template <class T>
void Merge(T a[],T b[],int left,int middle,int right);
template<class T>
void Copy(T a[],T b[],int left,int right);

template<class T>
void MergeSort(T a[],int left,int right)
{
    if(right>left){
        int middle=(left+right)/2;
        T b[right-left+1];
        MergeSort(a,left,middle);
        MergeSort(a,middle+1,right);
        Merge(a,b,left,middle,right);
        Copy(a,b,left,right);
    }
}

template <class T>
void Merge(T a[],T b[],int left,int middle,int right)
{
    int k=0,i=0,j=middle;
    while(i<middle&&j<right){
        if(a[i]<a[j]){
            b[k++]=a[i++];
        }
        else{
            b[k++]=a[j++];
        }
    }
    if(i<middle){
        while(i<middle)
        b[k++]=a[i++];
    }
    if(j<right){
        while(j<right)
        b[k++]=a[j++];
    }
}

template<class T>
void Copy(T a[],T b[],int left,int right){
    int i=0,temp=left-1;
    while(i<=right-left){
        a[temp++]=b[i++];
    }
}

int main()
{
    int a[]={10,8,7,5,4,3,2,1};
    MergeSort(a,1,8) ;
    for(int i=0;i<8;i++){
        cout<<a[i]<<"  "<<endl;
    }
    return 0;
}

http://blog.csdn.net/left_la/article/details/8656953