C++合并排序

C++——合并排序

代码块

#include
using namespace std;

template<typename T>
void Merge(T*,int,int,int);
template<typename T>
void MergeSort(T*,int,int); 

/**
*分离数组 
*/
template<typename T>
void MergeSort(T *arr,int begin,int end) {
    if(begin+1int middle=(begin+end)/2;
        MergeSort(arr,begin,middle);
        MergeSort(arr,middle,end);
        Merge(arr,begin,middle,end);
    }
}
/**
*归并排序 
*/
template<typename T>
void Merge(T* arr,int begin,int middle, int end) {
    //创建辅助的数组
    int n1,n2;
    n1=middle-begin; //前半部分的 
    n2=end-middle;   //后半部分的 
    T* left= new T[n1]; 
    T* right=new T[n2];
    //空间分配后,把原来数组复制到辅助空间中去
    for(int i=0;ifor(int i=0;iint i=0,j=0,key;
    //begin 开始 end结束 i左边数组下标 j右边下标 
    for(key=begin;key//第一种情况  左边比右边小 
        if(i//第二种情况  左边比右边大
        else if(j=right[j]) {
            arr[key]=right[j];
            j++;
        }
        //第三种 右边全部比完了 左边剩下的全放入数组
        else if(j==n2&&i//第四种 左边全部比完了  右边全部放入数组 
        else if(i==n1&&j//释放内存 
    delete[] left;
    delete[] right;
}
int main() {
    int n;
    cin>>n;
    int arr[n];
    for(int i=0;icin>>arr[i];
    }
    MergeSort(arr,0,n);
    for(int i=0;icout<' ';
    }
    cout<return 0;
} 

你可能感兴趣的:(C++合并排序)