当前位置: 首页 > news >正文

排序算法之归并排序

一、归并排序的形象理解

原题链接

示例代码

void merge_sort(int q[], int l, int r)
{if (l >= r) return;int mid = l + r >> 1;merge_sort(q, l, mid), merge_sort(q, mid + 1, r);int k = 0, i = l, j = mid + 1;while (i <= mid && j <= r) //第一处if (q[i] <= q[j]) tmp[k ++ ] = q[i ++ ];else tmp[k ++ ] = q[j ++ ];while (i <= mid) tmp[k ++ ] = q[i ++ ]; // 第二处while (j <= r) tmp[k ++ ] = q[j ++ ]; //第三处for (i = l, j = 0; i <= r; i ++, j ++ ) q[i] = tmp[j]; //数组回填也很重要
}

代码分析


个人理解
几个重要的点
1、先递归后排序的目的是为了深入到最小区间开始排序,最小区间即两个元素,如上图示意。
2、选取的mid是向下取整,所以左半部区间都是2的整数倍
3、递归的顺序都是从左到右开始
三处循环的理解:
1、循环第一处两个区间相等如果排序的数总数为偶数,则只会在循环第一处处理结束,如果排序的数总数为奇数,则还有可能进入循环第二处、循环第三处处理。
2、 i和j循环中可以如此交换赋值前提是最小区间(区间内个数为2)都是排好序的,不然无法按照此方法排序,示例如下图
image-20230831234028867

http://www.lryc.cn/news/173218.html

相关文章:

  • macOS 下 Termius 中文显示为乱码
  • Apifox接口测试工具详细解析
  • Python 实现 PDF 文件转换为图片 / PaddleOCR
  • 【Java基础夯实】变量声明选择包装类还是基本类型有哪些讲究?
  • 获取唯一的短邀请码
  • 大词表语言模型在续写任务上的一个问题及对策
  • Spark SQL【电商购买数据分析】
  • Google拟放弃博通自行研发AI芯片 | 百能云芯
  • 一百八十二、大数据离线数仓——离线数仓从Kafka采集、最终把结果数据同步到ClickHouse的完整数仓流程(待续)
  • 掌动智能:卓越性能的API接口测试工具
  • Flutter 基本概念
  • PHP包含读文件写文件
  • uniapp——实现base64格式二维码图片生成+保存二维码图片——基础积累
  • 【二叉树魔法:链式结构与递归的纠缠】
  • FL Studio21.0.3最新中文版下载安装详解
  • 【算法与数据结构】JavaScript实现十大排序算法(一)
  • IntelliJ IDEA使用——插件推荐
  • 编写一个会导致死锁的程序,将怎么解决?
  • Java JVM分析利器JProfiler 结合IDEA使用详细教程
  • 包含日志文件
  • 李航老师《统计学习方法》第2章阅读笔记
  • ruoyi框架修改左侧菜单样式
  • 【已解决】PyCharm里的黄色波浪线
  • 设计模式:策略模式(C++实现)
  • 网络安全深入学习第二课——热门框架漏洞(RCE—Thinkphp5.0.23 代码执行)
  • Pdf文件签名检查
  • web前端之float布局与flex布局
  • expected ‘,’ after expression in R【R错误】
  • 算法|图论 2
  • 使用C#实现服务端与客户端的简陋聊天