C C++最全归并排序(C语言)详解_归并排序c语言,2024年最新深入剖析原理

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

如果i>j,那么就让k=j;j++,k++;
最后,一定会有一个数组里面留下元素,例如上面这个;
{2,7,9,12}中会有9和12留下,最后再把9和12放在待排序的数组里面就好了!
在这里插入图片描述

所以如果有一个数组是{1,4,6,8,2,7,9,12};
要对它进行排序,是不是应该给它分成两半分别是{1,4,6,8}和{2,7,9,12};
在进行上面的操作;
其实很简单,我们设三个变量left代表1,mid代表8,right代表12;
left 到 mid 就是{1,4,6,8},mid+1到 right 就是{2,7,9,12}

思路就是这样
接下来用代码实现一下
在这里插入图片描述

int merge(int r[],int s[],int left,int mid,int right)
{
    int i,j,k;
    i=left;
    j=mid+1;
    k=left;
    while((i<=mid)&&(j<=right))
        if(r[i]<=r[j])
        {
            s[k] = r[i];
            i++;
            k++;
        }
        else
        {
            s[k]=r[j];
            j++;
            k++;
        }
        while(i<=mid)
            s[k++]=r[i++];
        while(j<=right)
            s[k++]=r[j++];
    return 0;
}

这部分呢就是对{1,4,6,8,2,7,9,12}这样的数组进行排序的功能;

那会有同学问了,难道归并排序只能对这样的两个已经排序好的数组操作吗。
那他好垃圾啊;
在这里插入图片描述
不不不,当然不是这样的。
如果给一个数组{4,12,8,9,6,2,7};
咱归并是毫不抗拒的,不过呢,只靠上面的代码显然是实现不出来的。
那怎么办呢,加东西喽!
在这里插入图片描述
这就要用到一个叫做分治法的一个思想;
怎么回事呢;
就是把{4,12,8,9,6,2,7}分成两半,去执行上面的排序功能,哎我发现分割后;
{4,12,8}和{9,6,2,7}这两个也不满足我排序功能的条件啊!
在这里插入图片描述
哎,那我就吧{4,12,8}和{9,6,2,7}都再次分成两半;再去归并排序;
啊?你说还不满足,那就再给我分!最后分成一堆就剩两个元素的数组,一定满足了吧!
在这里插入图片描述
现在,我们用递归的方法把这个给实现出来;

int merge\_sort(int r[],int s[],int left,int right)
{
    int mid;
    int t[20];
    if(left==right)
        s[left]=r[right];
    else
    {
        mid=(left+right)/2;
        merge\_sort(r,t,left,mid);
        merge\_sort(r,t,mid+1,right);
        merge(t,s,left,mid,right);
    }
    return 0;
}

完全ojbk,归并排序的两个功能块我们就全实现出来了,现在我们来用主函数测试一下!
在这里插入图片描述



![img](https://img-blog.csdnimg.cn/img_convert/61841f7d14b7aba500447fa8b62f252d.png)
![img](https://img-blog.csdnimg.cn/img_convert/597460d570317f5e6bdfa8ad82405ea6.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618668825)**

图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618668825)**

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值