算法通过村第十关-并归|黄金笔记|手撕并归排序

news2024/11/26 9:33:17

文章目录

  • 前言
  • 并归排序的原理
  • 总结


前言


提示:有时我会担心你们发现我其实很普通。爱并不需要你与众不同。--查理·麦克西《男孩、鼹鼠、狐狸和马》

并归排序算是经典的分治思想中的问题,这个非常典型的题目。

并归排序的原理

并归排序,简单来说就是将大的序列先视为若干个比较小的数组,份成几个比较小的结构,然后是利用并归的思想实现的排序方式,该算法采用经典的分治策略(分就是将问题分(divide)成一些小的问题分别求解,而治(conquer)则将分的阶段得到的各个答案“合”在一起。)

在这里插入图片描述
可以看到这种结构很想两个套在一起的满二叉树,分的阶段可以理解为就是递归差分子序列的过程,递归的深度为logn。也就是上图中的满二叉树。

再看看治的过程,我们将两个已经有序的子序列合并成一个有序序列,就是下面的满二叉树。比如上图中的最后一次合并,就是将[4,5,7,8]和[1,2,3,6]两个已有的子序列,合并成为最终序列[1,2,3,4,5,6,7,8],这个操作和合并两个有序数组完全一样,不同的是这里将数组的两部分合并。

我们看下遍历处理元素的过程:


试着分析下代码怎么写🤔:

	/**
     * 并归排序 (相当重要的)
     * @param array
     * @param start
     * @param end
     * @param temp
     */
    public void mergeSort(int[] array, int start, int end, int[] temp) {
        if (start >= end) {
            return;
        }
        // 左边
        mergeSort(array, start, (start + end) >> 1, temp);
        // 右边
        mergeSort(array, ((start + end) >> 1) + 1, end, temp);
        merge(array, start, end, temp);
    }

    private void merge(int[] array, int start, int end, int[] temp) {
        // 取中间
        int middle = (start + end) >> 1;
        // 左边一半
        int left = start;
        // 右边一半
        int right = middle + 1;
        int index = left;
        // 循环赋值
        while(left <= middle && right <= end){
            if (array[left] < array[right]){
                temp[index++] = array[left++];
            }else{
                temp[index++] = array[right++];
            }
        }
        while(left <= middle){
            temp[index++] = array[left++];
        }
        while(right <= end){
            temp[index++] = array[right++];
        }
        // 重新赋值
        for(int i = start; i <= end; i++){
            array[i] = temp[i];
        }
    }

总结

提示:并归排序;手撕并归;分治思想;满二叉树;排序算法


博主创作不易,如果感觉文章内容对你有所帮助的话不妨三连一下再走呗。你们的支持就是我更新的动力!!!

送上我从秋叶大佬哪里拿来的图表示感谢!


在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1049321.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

预测算法6|BP_adaboost算法原理及其实现

BPNN是一种根据误差反向传播算法训练的多层前馈网络&#xff0c;具有很强的非线性处理能力&#xff0c;是目前应用最广泛的神经网络之一。但BPNN的泛化能力相对较差&#xff0c;在优化过程中易陷入局部极小值&#xff0c;同时&#xff0c;它的鲁棒性差&#xff0c;学习过程的收…

【考研数学】概率论与数理统计 —— 第三章 | 二维随机变量及其分布(1,二维连续型和离散型随机变量基本概念与性质)

文章目录 引言一、二维随机变量及分布1.1 基本概念1.2 联合分布函数的性质 二、二维离散型随机变量及分布三、多维连续型随机变量及分布3.1 基本概念3.2 二维连续型随机变量的性质 写在最后 引言 隔了好长时间没看概率论了&#xff0c;上一篇文章还是 8.29 &#xff0c;快一个…

一个人可以开发游戏吗?

在今天的数字时代&#xff0c;游戏产业已经成为全球最具活力的领域之一。从大型游戏开发工作室到独立游戏制作人&#xff0c;游戏开发已经变得更加多样化和容易进入。然而&#xff0c;对于许多梦想成为游戏开发者的人来说&#xff0c;一个关键问题一直挥之不去&#xff1a;一个…

组网行动指南:打造对跨国企业友好的专用网络环境

在全球数字化转型的浪潮下&#xff0c;越来越多的企业跨国发展业务&#xff0c;由于跨域网络的复杂性和自建网络架构的各种限制&#xff0c;导致分散在不同地理位置的站点无法实现数据互通和协作。 跨国企业组网常见痛点 痛点一&#xff1a;自建网络方案经常掉线&#xff0c;影…

No128.精选前端面试题,享受每天的挑战和学习

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…

CompletableFuture-线程池运行选择

如果没有传入自定义线程池&#xff0c;都用默认线程池ForkJoinPool 传入一个线程池&#xff0c;如果你执行第一个任务时&#xff0c;传入了一个自定义线程池&#xff0c; 调用thenRun方法执行第二个任务时&#xff0c;则第二个任务和第一个任务时共用同一个线程池 调用thenRun…

26559-2021 机械式停车设备 分类

声明 本文是学习GB-T 26559-2021 机械式停车设备 分类. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本文件规定了机械式停车设备的分类及有关的型式、型号和适停汽车组别、尺寸及质量。 本文件适用于 GB/T 3730.1—2001定义的乘用车及商用…

K8sGPT,基于 AI 的云原生终极工具

随着人工智能和机器学习的兴起&#xff0c;企业和组织越来越多地寻找创新方法来利用这些技术来获得竞争优势。 该领域最强大的工具之一便是 K8sGPT&#xff0c;即基于 Kubernetes 的 GPT&#xff0c;它将 Kubernetes 编排的优势与 GPT 模型的高级自然语言处理能力结合在一起。 …

人工智能AI 全栈体系(八)

第一章 神经网络是如何实现的 神经网络只是提供了一个一般性方法&#xff0c;具体用它求解什么问题&#xff0c;根据问题的特点&#xff0c;定义好输入输出以及损失函数就可以了。 在介绍神经网络语言模型结构的时候&#xff0c;每个词 w 都对应一个长度为 m 的向量 C(w)&…

深度学习(1)---卷积神经网络

文章目录 一、发展历史1.1 CNN简要说明1.2 猫的视觉实验1.3 新认知机1.4 LeNet-51.5 AlexNet 二、卷积层2.1 图像识别特点2.2 卷积运算2.3 卷积核2.4 填充和步长2.5 卷积计算公式2.6 多通道卷积 三、池化层 一、发展历史 1.1 CNN简要说明 1. 卷积神经网络&#xff08;Convolut…

化妆品微针贴片,全球市场总体规模,前12大厂商排名及市场份额

化妆品微针贴片全球市场总体规模 化妆品微针贴片是一种新型的美容护肤产品&#xff0c;它采用微针技术&#xff0c;将微针嵌入贴片中&#xff0c;通过将贴片贴在皮肤表面&#xff0c;使微针穿透皮肤表层&#xff0c;将活性成分输送到皮肤深层&#xff0c;从而达到美容护肤的效…

LeetCode【2251. 花期内花的数目】

给你一个下标从 0 开始的二维整数数组 flowers &#xff0c;其中 flowers[i] [starti, endi] 表示第 i 朵花的 花期 从 starti 到 endi &#xff08;都 包含&#xff09;。同时给你一个下标从 0 开始大小为 n 的整数数组 people &#xff0c;people[i] 是第 i 个人来看花的时间…

笔记本摄像头怎么打开?记牢这5个简单方法!

“我有一个紧急视频会议&#xff0c;但是关键时刻我的笔记本电脑摄像头居然打不开了&#xff0c;真的让我很崩溃。有什么方法可以快速解决这个问题吗&#xff1f;非常感谢&#xff01;” 在互联网时代&#xff0c;电脑对我们来说非常重要。而借助电脑摄像头与朋友交流或者与同事…

全网最细,Python接口自动化测试参数关联(应用场景实例)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 什么是参数关联&a…

lift-splat-shoot(LSS)代码详解

原版lift-splat-shoot&#xff08;LSS&#xff09;代码详解 自己想搞一些事情&#xff0c;搞什么呢&#xff1f;和自动驾驶相关的&#xff0c;先走视觉路线的又比较多&#xff0c;bev的话就搞开山之作lss&#xff0c;看有什么可以优化的东西&#xff0c;于是就开始做一做试试看…

编译原理简介

编译原理简介 编译原理的研究对于理解和设计编程语言、编译器和解释器都非常重要。它不仅可以提高程序的执行效率&#xff0c;还可以帮助开发人员更好地理解程序的运行机制。编译原理是计算机科学中的一个重要分支&#xff0c;研究的是编译器的设计和实现。对于从事编译器开发…

人员重识别:Person Re-Identification without Identification via Event Anonymization

论文作者&#xff1a;Shafiq Ahmad,Pietro Morerio,Alessio Del Bue 作者单位&#xff1a;Istituto Italino di Tecnologia;Universita degli Studi di Genova 论文链接&#xff1a;http://arxiv.org/abs/2308.04402v1 内容简介&#xff1a; 1&#xff09;方向&#xff1a;…

欧拉公式推导网格中点线面估计数量关系

欢迎关注更多精彩 关注我&#xff0c;学习常用算法与数据结构&#xff0c;一题多解&#xff0c;降维打击。 背景 之前面试网格算法工程师时被问到三角网格中点和面的数量关系。delaunay 三角剖分要估计边的数量来事先申请内存。 通过查找资料了解原理和推导过程。 欧拉公式…

重生奇迹海魔是亚特兰蒂斯的最后一站

当重生奇迹MU玩家开始打算挑战海魔希特拉时&#xff0c;通常就意味着这一次亚特兰蒂斯的旅程已经走到了尾声&#xff0c;因为这个海魔便是海洋的最后一站&#xff0c;成功抵达后就能顺利地通关这片海域。同时&#xff0c;如果此刻玩家等级已经到达130级&#xff0c;那么沙漠地图…

方法:Ubuntu配置网络源-apt源、pip源、conda源

apt源 方法1 编辑/etc/apt/sources.list: sudo gedit /etc/apt/sources.list 写入&#xff0c;如阿里源 deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe mu…