合并排序-递归分治

2023-11-13

按我的想法,简单地说,合并排序的思路就是:

先递归,后排序。

#include<iostream>
using namespace std;
void merge_sort(int a[],int p,int r);
void merge(int a[],int p,int q,int r);
int b[20];

int main()
{
    int a[11]={1,49,60,12,-12,101,121,62,60,8,-100};
    int len=sizeof(a)/sizeof(a[0]);
    merge_sort(a,0,len-1);
    //输出结果
    for(int i=0;i<len;i++)
    {
        cout<<a[i]<<"  ";
    }
    return 0;
}

void merge_sort(int a[],int p,int r)
{
    int q=0;
    if(p<r)
    {
        q=(p+r)/2;//拆分待排序元素
        merge_sort(a,p,q);
        merge_sort(a,q+1,r);
        merge(a,p,q,r);//将两个拆分后排好序的子序列合并起来
    }
}

void merge(int a[],int p,int q,int r)
{
    int b_index=0;
    //局部排序
    int i=q,j=r;
    while(i>=p&&j>=q+1)
    {

        if(a[i]>=a[j])
        {
            b[b_index++]=a[i--];
        }else{

            b[b_index++]=a[j--];
        }
    }

    //下面两个if用来处理剩余的元素
    while(i>=p)
    {
        b[b_index++]=a[i--];
    }

    while(j>=q+1)
    {
        b[b_index++]=a[j--];
    }

    b_index--;
    for(int i=p;i<=r;i++)
    {
        a[i]=b[b_index--];
    }

}




本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

合并排序-递归分治 的相关文章

随机推荐

  • idea里面Mybatis的xml基础配置文件表名、字段、别名报红问题的解决!

    这里是因为我之前在idea里面设置了Hibernate的MySQL方言 导致Mybatis的xml基础配置文件表名 字段 别名疯狂报红 1 最终取消了idea里面MySql的方言设置之后 问题及解决了 idea操作步骤 file gt se
  • 鸿蒙关于读取手机文件操作

    1 申请读写权限 先在config json中申请 再使用JAVA代码动态申请 ohos permission READ USER STORAGE和ohos permission WRITE USER STORAGE 2 获取File对象
  • html页面回退 刷新,vue2.0页面前进刷新回退不刷新的实现方法

    这篇文章主要为大家详细介绍了vue2 0页面前进刷新回退不刷新的实现方法 具有一定的参考价值 可以用来参考一下 感兴趣的小伙伴 下面一起跟随512笔记的小编两巴掌来看看吧 花了整整一周时间 尝试过很多种方法 终于找到了最佳的解决方案 对我来
  • 使用分支——Git Checkout

    这篇文章写的挺好 https zhuanlan zhihu com p 465954849 这里要注意 git 新的命令 通过 git switch 切换分支 虽然git checkout 分支 还可以用 游离状态的HEADS 在我们已经见
  • pikachu靶场搭建以及搭建问题

    前言 pikachu是一个适合Web渗透测试学习的小白们进行训练的本地靶场 并且已经在github上开源了 它是一个综合性的靶场 非常适合新手练习 接下来就简单的看一下它如何在Windows上搭建吧 Apache与MySQL环境搭建 然后这
  • 如何判断合法标识符

    题目描述 给出一个标识符 请你判断它是否是C语言合法的标识符 输入 输入一个标识符 长度不超过100 输出 判断是否合法 如果是输出YES 否则输出NO 示例输入 123You 示例输出 NO 提示 C语言规定 标识符只能由字母 数字和下划
  • SSH 和 SSL 加密协议

    SSH和SSL都是加密协议 用于保护网络通信的安全性和完整性 但它们用途和实现方式有所不同 SSH Secure Shell 是一种网络协议 用于远程访问和管理服务器 它提供了加密的连接和认证机制 使得数据传输更加安全 SSH通常用于远程登
  • Linux下使用STM32CUBEMX的makefile,报multiple defination错误的解决办法

    之所以报这个错是因为stm32cubemx生成makefile的一个bug 在C SOURCES部分会重复添加Src 下的c文件 上图是没有修改makefile之前 下图为修改后 要修改的部分
  • pthon代码实现在linux下对siebel服务器换包重启

    siebel服务器的换包重启 需要输入多个命令 而且中间需要等待 经常停了服务忘了启动 之前项目的TA有写过一些shell脚本 启服务的 停服务的 包括自动换包重启的 但是因为里面有个mount目录经常出问题 所以平时也没有使用 最近刚好在
  • css基本语法

    1 background background image url image jpg background color ccf background position center background repeat no repeat
  • 数据库:什么是主键

    数据库主键 主键 表中经常有一个列或列的组合 其值能唯一地标识表中的每一行 通俗叫 一个表中只能有一个主键 不接受空值 能唯一的表示表中的每一行 例如 银行卡的卡号就是主键 不存在重复的情况
  • Java 数据类型转换(Casting)

    Java中 经常可以遇到类型转换的场景 从变量的定义到复制 数值变量的计算到方法的参数传递 基类与派生类间的造型等 随处可见类型转换的身影 Java中的类型转换在Java编码中具有重要的作用 本文主要介绍一下Java 数据类型转换 Cast
  • 华为防火墙默认密码是什么?

    华为默认密码是什么 分享至 小王邀请您加入牛B的IT关键业务推动者社区 点击领取12G的软考 PMP资料包 特训营名额 gt gt 售前工程师系列 教你写解决方案 gt gt ld11235813 荣誉会员 Rank 12Rank 12Ra
  • 华为动态pnat配置

  • 微软宣布IE9正式版发布日期

    微软上月曾透露会在3月14日于美国德克萨斯州奥斯汀市SXSW音乐电影节上举办一个庆祝派对 从那时起就有很多猜想 我们才曾猜测微软届时会正式发布IE9 今天 微软终于不再卖关子 3月14日 也就是下周一 微软将正式发布IE9 微软证实 美国太
  • TensorFlow之双隐含层多层感知器(MLP)

    程序改自上一篇博客 使用了双隐含层 第二层隐含层初始w需要和第一层类似 否则程序正确率一直在0 1左右 修改后的程序正确率也在98 左右 coding utf 8 from tensorflow examples tutorials mni
  • 整理一些windows的bat命令及语法

    ver 在DOS窗口下显示版本信息 winver 弹出一个窗口显示版本信息 内存大小 系统版本 补丁版本 计算机名 format 盘符 FS 类型 格式化磁盘 类型 FAT FAT32 NTFS 例 Format D FS NTFS md
  • python基础系列之元组

    元组应用场景 储存多个数据 但是这些数据不可修改 我们知道列表可以储存多个数据 但是数据可增加 修改 删除 这也是元组和列表不一样的地方 如何定义一个元组 多个数据元组 t1 10 20 30 单个数据元组 t2 10 注意在定义单个数据的
  • 常量表达式函数

    我们可以在函数返回类型前加入关键字constexpr来使其成为常量表达式函数 但并非所有的函数都有资格成为常量表达式函数 事实上 常量表达式函数的要求非常严格 总结如下 函数体只有单一的return返回语句 函数必须返回值 不能是void函
  • 合并排序-递归分治

    按我的想法 简单地说 合并排序的思路就是 先递归 后排序 include