1. 程式人生 > >【排序演算法】歸併排序(C++)

【排序演算法】歸併排序(C++)

歸併排序的遞迴實現 C++

class MergeSort {
public:
    int* mergeSort(int* A, int n) {
        // write code here
        merge(A,0,n-1);
        return A;
    }
    void merge(int* A, int left, int right)
    {
        if(left<right) //待排序序列只有一個記錄,遞迴結束
        {
            int middle=(left+right)/2;
            merge
(A,left,middle); //歸併排序前半個序列 merge(A,middle+1,right); //歸併排序後半個序列 mergearray(A,left,middle,right); //將兩個已排序的子序列歸併 } } void mergearray(int* A, int left, int m, int right) { int tmpA[right-left+1]; int i=left,j=m+1,tmpi=0; while
(i<=m&&j<=right) { //取左右子序列中較小者放入臨時陣列 if(A[i]<=A[j]) tmpA[tmpi++]=A[i++]; else tmpA[tmpi++]=A[j++]; } while(i<=m) //若左子序列沒有處理完,則進行收尾工作 tmpA[tmpi++]=A[i++]; while
(j<=right) //若右子序列沒有處理完,則進行收尾工作 tmpA[tmpi++]=A[j++]; for(tmpi=0;tmpi<right-left+1;tmpi++) A[left+tmpi]=tmpA[tmpi]; } };