美文网首页
算法导论练习2.3-2和2.3-3

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

作者: Ahungrynoob | 来源:发表于2018-03-17 17:34 被阅读0次

    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

    相关文章

      网友评论

          本文标题:算法导论练习2.3-2和2.3-3

          本文链接:https://www.haomeiwen.com/subject/etbjqftx.html