数据结构与算法——归并排序


/*crate a new array to put the elements sorted*/
void MergeSort(int a[], int n){
    int *TmpArray;

    TmpArray = (int*)malloc(n*sizeof(int));
    if (TmpArray != NULL){
        MSort(a, TmpArray, 0, n - 1);
        free(TmpArray);
    }
}
//We could utilize the stack to understand the Sort and Merge
void MSort(int a[], int TmpArray[], int left, int right){
    int center;
    if (left < right){
        center = (left + right) / 2;
        MSort(a, TmpArray, left, center);// sort the left side
        MSort(a, TmpArray, center + 1, right);// sort the right side
        Merge(a, TmpArray,left,center + 1, right);
    }
}
/*two sorted array can be merged easily*/
void Merge(int a[], int TmpArray[], int left, int mid, int right){
    int i,Tmp,NumElements;

    Tmp = left;
    NumElements = right - left + 1;

    m = mid - 1;

    while (left <= m&&mid <= right){
        if (a[left] <= a[mid])
            TmpArray[Tmp++] = a[left++];
        else
            TmpArray[Tmp++] = a[mid++];
    }

    while (left <= m)
        TmpArray[Tmp++] = a[left++];
    while (mid <= right)
        TmpArray[Tmp++] = a[mid++];

    for (i = 0; i < NumElements; i++, right--)
        a[right] = TmpArray[right];
}

posted @ 2016-12-17 22:48  z_Vincent  阅读(170)  评论(0)    收藏  举报