[关闭]
@Zh1Cheung 2018-03-16T12:34:05.000000Z 字数 702 阅读 606

排序(4):归并排序

对于待排序数组:{ 5, 2, 4, 6, 1, 3, 2, 6 },归并算法的思路如上图,注意上图是从下往上看。

/* 把有序的 array[left]...array[mid] 和 array[mid+1]...array[right] 合并 */
void Merge(int array[], int temp[], int left, int mid, int right)
{
    int i = left;
    int j = mid + 1;
    int k = left;

    while (i <= mid && j <= right)
    {
        if (array[i] < array[j])
            temp[k++] = array[i++];
        else
            temp[k++] = array[j++];
    }

    while (i <= mid)
        temp[k++] = array[i++];
    while (j <= right)
        temp[k++] = array[j++];

    while (left <= right)
        array[left] = temp[left++];
}

/* temp[] 数组起到一个中转的作用 */
void MergeSort(int array[], int temp[], int left, int right)
{
    if (left >= right)
        return;

    int mid = ((right - left) >> 1) + left;

    MergeSort(array, temp, left, mid);
    MergeSort(array, temp, mid + 1, right);

    Merge(array, temp, left, mid, right);
}

Merge()耗时,则归并排序的时间递归式为,解得

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注