算法导论练习2.3-2和2.3-3

2018-03-17  本文已影响0人  Ahungrynoob

Merge函数的实现

以下是c语言实现的源码

merge函数是归并排序的工具函数,很重要。数组下标的加加减减要小心。

void merge(int arr[], int p, int q, int r)
{
    int n1 = q - p + 1; //左数组的size 4
    int n2 = r - q;     //右数组的size 6
    int left[n1];
    int right[n2];
    //复制到新数组
    for (int i = 0; i < n1; i++)
    {
        left[i] = arr[i + p - 1];
    }
    for (int j = 0; j < n2; j++)
    {
        right[j] = arr[j + q];
    }

    int i = 0;
    int j = 0;
    int k = p - 1;
    while (i != n1 && j != n2)
    {
        if (left[i] < right[j])
        {
            arr[k] = left[i];
            i++;
        }
        else
        {
            arr[k] = right[j];
            j++;
        }
        k++;
    }
    if (i == n1)
    {
        while (j < n2)
        {
            arr[k] = right[j];
            j++;
            k++;
        }
    }
    else
    {
        while (i < n1)
        {
            arr[k] = left[i];
            i++;
            k++;
        }
    }
}

然后是数学归纳法证明题:

IMG_0034.JPG
上一篇下一篇

猜你喜欢

热点阅读