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

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1 初级排序算法 排序算法关注的主要是重新排列数组元素,其中每个元素都有一个主键。排序算法是将所有元素主键按某种方...
    深度沉迷学习阅读 5,349评论 0 1
  • 冒泡排序 冒泡排序相对来说是较为简单的一种排序,它的思想就是在每一次循环中比较相邻的两个数,通过交换的方式,将最小...
    陌上疏影凉阅读 3,669评论 0 3
  • 2016.7.5-2016.10.15,坐标上海。一直想写写自己在魔都呆了几个月的切身感受,给那些准备来上海...
    younger大大阅读 5,231评论 13 4
  • 现金再投资比率>10% 公司靠自己日常营运实力赚来的钱(营业活动现金流量)扣除掉给股东现金股利之后,公司最后自己手...
    xieying466阅读 2,767评论 0 0
  • 业余时间,静下心,画几张小画。 其实,读书时就喜欢画画。 工作后,忙忙碌碌,断断续续,近几年才重拾旧好。 谢谢观赏。
    王者_52be阅读 4,991评论 70 104