算法通关村第十关—归并排序(黄金)

news2025/2/6 17:52:01

        归并排序

一、归并排序原理

 归并排序(MERGE-SORT)简单来说就是将大的序列先视为若干个比较小的数组,分成几个比较小的结构,然后是利用归并的思想实现的排序方法,该算法采用经典的分治策略(分就是将问题分(divide)成一些小的问题分别求解,而治(conquer).则将分的阶段得到的各答案"合"在一起)。
image.png
 可以看到这种结构很像两棵套在一起的满二叉树。分阶段可以理解为就是递归拆分子序列的过程,递归深度为logn。就是图中上面侧的满二叉树。
 再来看看治阶段,我们需要将两个已经有序的子序列合并成一个有序序列,就是下侧的满二叉树。比如上图中的最后一次合并,要将[4,5,7,8]和[1,2,3,6]两个已经有序的子序列,合并为最终序列[1,2,3,4,5,6,7,8],这个操作与合并两个有序数组的完全一样,不同的是这里是将数组的两个部分合并。
 再看一下遍历时处理元素的过程:
image.png

二、代码实现

static void mergeSort(int[] array,int start,int end,int temp[]){
    if (start > end){
        return;
    }
    mergeSort(array,start,(start+end)/2,temp);
    mergeSort(array,(start+end)/2 + 1,end,temp);
    merge(array,start,end,temp);
    static void merge(int[] array,int start,int end,int[] temp){
        int middle = (start + end)/2;
        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];
            }
        }

        //测试方法
        public static void main(String[]args){
            int[] array = {6,3,2,1,4,5,8,7};
            int[]temp = new int[array.length];
            mergeSort(array,0,array.length - 1,temp);
            System.out.println(Arrays.toString(array));
        }

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

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

相关文章

阶段性复习(二)

阶段性复习第二弹&#xff01; 一.操作符 继上期复习了一部分&#xff0c;我们继续复习操作符&#xff0c;今天着重复习双目操作符 有一类题&#xff0c;通过结果分析反推求过程中的表达式 从这道题可以看出&#xff0c;t是4的时候&#xff0c;s要是2&#xff0c;所以a&…

飞天使-k8s知识点7-kubernetes升级

文章目录 验证新版本有没有问题需要安装的版本微微 1.20.6.0kubeadm upgrade plan 验证新版本有没有问题 查看可用版本的包 现有的状态 查看版本 yum list kubeadm --showduplicates |grep 1.20 yum list kubelet --showduplicates |grep 1.20 yum list kubectl --showduplic…

云渲染UE4像素流送搭建(winows、ubuntu单实例与多实例像素流送)

windows/ubuntu20.4下UE4.27.2像素流送 像素流送技术可以将服务器端打包的虚幻引擎应用程序在客户端的浏览器上运行&#xff0c;用户可以通过浏览器操作虚幻引擎应用程序&#xff0c;客户端无需下载虚幻引擎&#xff0c;本文实现两台机器通过物理介质网线实现虚幻引擎应用程序…

推荐3款高效又免费的MP4转MP3格式转换工具

在日常生活和工作中&#xff0c;我们经常会遇到需要将MP4视频文件转换成MP3音频文件的情况&#xff0c;以便在其他设备上播放或享受音频内容。如果你正在寻找一款高效又免费的MP4转MP3格式转换工具&#xff0c;那么你来对地方了&#xff01;本文将为你推荐3款最佳工具&#xff…

STM32使用printf重定向到USART

配置你想要重映射的串口&#xff0c;这里用串口1举例子&#xff0c;你完全可以定义成其他串口。 波特率和位数格式完全按照需要定义&#xff0c;这里不要开启dma和中断。 这里建议使用单独生成.c和.h&#xff0c;当然你不生成也完全可以。 /* USER CODE BEGIN 0 */ int __io_p…

重装系统后桌面图标没有了,“此电脑”怎么添加?

重装电脑系统对于使用电脑的用户来说是一种很常见的操作。但是有时在重装系统之后&#xff0c;我们会发现电脑桌面图标不见了&#xff0c;那么这时该怎么办呢&#xff1f;“此电脑”该怎么添加呢&#xff1f; 解决方法&#xff1a; 1.在桌面空白处单击鼠标右键&#xff0c;选择…

九州金榜|家庭教育中注意孩子早起抑郁症征兆

在现代社会&#xff0c;心理健康问题越来越受到关注和重视。尤其是青少年&#xff0c;由于学业、人际关系等因素&#xff0c;可能会面临抑郁症的困扰。然而&#xff0c;很多家长对孩子的心理状况缺乏了解&#xff0c;未能及时发现他们心中的烦恼。以下是一些关于抑郁症早期征兆…

anaconda prompt进入虚拟环境 打开spyder

目录 1.查看有多少虚拟环境 2.conda create 指令创建新的虚拟环境 3.进入虚拟环境 4.spyder进入虚拟环境 5.退出虚拟环境 6.删除虚拟环境 1.查看有多少虚拟环境 打开anaconda prompt&#xff0c;输入 conda env list 2.conda create 指令创建新的虚拟环境 conda cre…

免费高清无水印视频素材在哪里下?

剪辑是一门创意工作&#xff0c;但很多初学者常常感到困惑&#xff0c;原因并不是因为他们不懂剪辑&#xff0c;而是因为他们不知道从哪里找到合适的素材。今天&#xff0c;我们将为大家盘点一些超全的剪辑素材资源&#xff0c;包括视频素材、音乐素材和图片素材等&#xff0c;…

Vue axios 拦截器

正常情况下打开浏览器前端页面向后端发起请求使用的是axios&#xff0c;无论是原生的axios还是自己封装的axios都看成是axios。发起请求之后后端去数据库里面拿数据&#xff0c;然后返回给前端。 发起请求的地方是axios&#xff0c;并且你能够封装这个axios&#xff0c;那么你…

R语言的极值统计学及其在相关领域中的实践技术应用

受到气候变化、温室效应以及人类活动等因素的影响&#xff0c;自然界中极端高温、极端环境污染、大洪水和大暴雨等现象的发生日益频繁&#xff1b;在人类社会中&#xff0c;股市崩溃、金融危机等极端情况也时有发生&#xff1b;今年的新冠疫情就是非常典型的极端现象。研究此类…

TensorFlow 2.0 深度学习实战 —— 浅谈卷积神经网络 CNN

卷积神经网络 CNN&#xff08;Convolutional Neural Networks&#xff0c;ConvNet&#xff09;是一种特殊的深度学习神经网络&#xff0c;近年来在物体识别、图像重绘、视频分析等多个层面得到了广泛的应用。 本文将以VGG16预训练模型为例子&#xff0c;从人脸识别、预训练模型…

【算法与数据结构】406、LeetCode根据身高重建队列

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;本题难点在于如何对序列进行排序&#xff0c;以及保证序列的顺序&#xff08;符合题目要求的顺序&…

中间件系列 - Redis入门到实战(高级篇-分布式缓存)

前言 学习视频&#xff1a; 黑马程序员Redis入门到实战教程&#xff0c;深度透析redis底层原理redis分布式锁企业解决方案黑马点评实战项目 本内容仅用于个人学习笔记&#xff0c;如有侵扰&#xff0c;联系删除 学习目标 Redis持久化Redis主从Redis哨兵Redis分片集群 一 分…

如何进行实例监控

目录 行实例监控 云监控 云监控核心功能 云监控ECS实例 安装插件 查看监控图表 云监控控制台 云服务器ECS控制台 设置报警规则 行实例监控 方式一&#xff1a;在服务器上自行编写并定时运行&#xff08;计划任务&#xff09;监控脚本&#xff08;shell、python&#x…

Neo4j 5.15 windows安装

1&#xff0c;什么是图数据库&#xff1f; 着社交、电商、金融、互联网那个等快速发展&#xff0c;现实社会织起了一张庞大复杂的关系网&#xff0c;传统数据库很难处理关系运算。大数据行业需要处理的数据之间的关系呈集合 数级增长&#xff0c;急需一种支持海量复杂数据关系…

【MYSQL】MYSQL 的学习教程(九)之 23 个 SQL 优化小技巧

这篇文章从 15 个方面&#xff0c;分享了 sql 优化的一些小技巧&#xff0c;希望对你有所帮助 目录 1. 避免使用 select *&#xff0c;务必指明字段名称2. 用 union all 代替 union3. 小表驱动大表4. 批量操作5. 当只需要一条数据的时候&#xff0c;使用limit 16. IN 包含的值不…

Windows配置C语言环境(超级详细)

Windows配置C语言环境 1.安装C编译器&#xff08;MinGW-W64 GCC&#xff09;1.1点击安装1.2将压缩包解压到相应目录1.3把mingw添加进系统的环境变量1.4测试 2安装并配置Visual Studio Code2.1下载VSCode2.2“Code Runner”扩展的配置 3.编写C语言 各位小伙伴想要博客相关资料的…

初识Nginx默认配置文件

说起配置Nginx确实是一件让人头疼的事&#xff0c;开始时对Nginx配置不熟悉&#xff0c;为了满足需求在网上查找了很多相关配置的博客&#xff0c;也是天花乱坠不知道谁对谁错。就不停反复尝试最终在不懈的努力下中终于成功了。那时就觉得是时候好好整理一下Nginx的相关配置了。…