首页 > 编程语言 > 详细

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

时间:2016-12-18 01:11:06      阅读:181      评论:0      收藏:0      [点我收藏+]


/*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;

    while (left <= mid-1, mid <= right){
        if (a[left] <= a[mid])
            TmpArray[Tmp++] = a[left++];
        else
            TmpArray[Tmp++] = a[mid++];
    }

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

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

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

原文:http://www.cnblogs.com/Vincent-Zy/p/6193413.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!