[LeetBook]【学习日记】排序算法——归并排序

news/2024/5/17 17:12:34 标签: 排序算法, 学习, 归并排序

主要思想

  1. 归并排序是一种分治算法,其排序过程包括分和治
  2. 分是指将要排序的序列一分为二、二分为四,直到单个序列中只有一个数
  3. 治是指在分完后,将每两个元素重新组合,四合为二、二合为一,最终完成排序
    在这里插入图片描述
    图片作者:Krahets
    链接:https://leetcode.cn/leetbook/read/illustration-of-algorithm/p5l0js/

代码框架

void mergeSort(vector<int> nums, int low, int high) {
        if(low>=high) return;//直到序列中只有单个元素
        //分
		...
        //治
		...
        }
    }
  1. 分:也就是一分为二的过程,类似二分查找,使用两个递归一次传入一半的序列
  2. 治:在分完后,新建一个临时数组,将要合并的内容先存储起来,然后使用两个下标从两个要合并的序列的开始处进行遍历比较,依次将正确顺序的元素存入原数组,当有一个下标超出其要遍历的序列时,直接将其他序列剩下的内容合并到原数组的后面

完整代码

在这里插入代码片void mergeSort(vector<int>& nums, int low, int high) {
        if(low>=high) return;
        int mid=(high+low)/2;
        //分
        mergeSort(nums, low, mid);
        mergeSort(nums, mid+1, high);
        //治
        vector<int> temp;
        temp.assign(nums.begin()+low, nums.begin()+high+1);
        int i=0, j=mid-low+1;//用于在 temp 中遍历
        for(int x=low; x<=high; ++x){
            if(i==mid-low+1) nums[x]=temp[j++];
            else if(j==high-low+1 || temp[j]>=temp[i]) nums[x]=temp[i++];
            else nums[x]=temp[j++];
        }
    }

此处的>=保证排序结果稳定。

else if(j==high-low+1 || nums[j]>=nums[i]) nums[x]=temp[i++];

相关题目

148. 排序链表
LCR 170. 交易逆序对的总数


http://www.niftyadmin.cn/n/5445997.html

相关文章

PTA 7-3 入侵者围剿第1关-3最大子段和

继续衔接入侵者围剿第一关的第三问&#xff1a; 3-情报小组对作战序列进行了进一步研究&#xff0c;发现整个序列中真正有效的作战序列是个最大子段和问题,也就是序列中的最大子段和才是敌方的真正作战序列。&#xff08;提示&#xff1a;给定由n个整数组成的序列&#xff0c;求…

从零开始设计,自主可控。Solon v2.7.2 发布!

Java Solon 是什么框架&#xff1f; 是一个可平替 Spring 生态的 Java 应用开发框架。从零开始构建&#xff0c;有自己的标准规范与开放生态。&#xff08;历时七年&#xff0c;具备全球第二级别的生态规模&#xff09; 追求&#xff1a; 更快、更小、更简单提倡&#xff1a;…

AI大模型学习在当前技术环境下的重要性与发展前景

目录 前言1 学科基础与技能要求1.1 数学基础的深厚性1.2 编程能力的必要性1.3 对特定领域业务场景的了解 2 模型结构与算法的优化2.1 模型结构的不断演进2.2 算法优化的重要性2.3 准确性与效率的提升 3 AI大模型学习的应用场景3.1 自然语言处理3.2 计算机视觉3.3 推荐系统 结语…

第十三届蓝桥杯物联网试题(省赛)

做后感悟&#xff1a; OLED显示函数需要一直显示&#xff0c;所以在主函数中要一直循环&#xff0c;为了确保这个检错功能error只输出一次&#xff0c;最好用中断串口进行接收数据&#xff0c;数据收完后自动进入中断函数中&#xff0c;做一次数据检查就好了&#xff0c;该开灯…

npm audit fix --force

npm audit fix --force是npm的一个命令,用于自动修复包中的安全漏洞。 其中: - npm audit:审查项目中的依赖包,检查是否存在已知的安全漏洞。 - fix:自动安装相关的补丁来修复发现的漏洞。 - --force:强制安装补丁版本,即使出现不兼容也强制更新。 所以npm audit fix --fo…

图形变换 ,鸿蒙

平移 作用&#xff1a;可使组件在以组件左上角为坐标原点的坐标系中进行移动 属性&#xff1a;translate() 参数&#xff1a;{x?: X轴移动距离, y?: Y轴移动距离, z?: Z轴移动距离} Entry Component struct Index {State message: string 点我;build() {Text().width(100)…

zookeeper 总结

1.zookeepr 节点的唯一性。 ZooKeeper中节点的唯一性是通过节点路径和节点数据构成的唯一标识来实现的。当创建节点时&#xff0c;如果提供的路径已经存在&#xff0c;则创建操作会失败&#xff0c;除非请求包含了Ephemeral类型的节点特有的可选字段SEQUENTIAL或EPHEMERAL。 …

在微服务架构中如何使用 Nginx 作为入口控制器或者服务网关

一、在 Kubernetes 中使用 Nginx 作为 Ingress Controller&#xff1a; 在微服务架构和容器化部署中&#xff0c;Nginx 常常被用来作为入口控制器&#xff08;Ingress Controller&#xff09;或者服务网关。以下是使用 Nginx 在这种环境中的一些步骤&#xff1a; 1、安装 Ngi…