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

文章目录

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


前言


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

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

并归排序的原理

并归排序,简单来说就是将大的序列先视为若干个比较小的数组,份成几个比较小的结构,然后是利用并归的思想实现的排序方式,该算法采用经典的分治策略(分就是将问题分(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.mzph.cn/news/90165.shtml

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

相关文章

Shiro高级及SaaS-HRM的认证授权

Shiro在SpringBoot工程的应用 Apache Shiro是一个功能强大、灵活的&#xff0c;开源的安全框架。它可以干净利落地处理身份验证、授权、企业会话管理和加密。越来越多的企业使用Shiro作为项目的安全框架&#xff0c;保证项目的平稳运行。 在之前的讲解中只是单独的使用shiro&…

成为吃鸡战场的王者!分享顶级战术干货,助您提高战斗力!

各位吃鸡战场的玩家们&#xff0c;欢迎来到本视频&#xff01;在这里&#xff0c;我将为您呈现一些与众不同的吃鸡干货&#xff0c;帮助您提高战斗力、轻松吃鸡&#xff01; 首先&#xff0c;让我们谈一谈作图工具推荐。绝地求生作图工具是吃鸡玩家们的必备利器。我将给大家推荐…

TikTok的伦理挑战:虚拟世界与现实世界的交汇

在数字时代&#xff0c;社交媒体平台已经不再只是一个信息传播的工具&#xff0c;它已经深刻地改变了我们的社交行为、价值观和伦理观。 而在这一领域的佼佼者之一&#xff0c;TikTok&#xff0c;正面临着伦理挑战&#xff0c;这是虚拟世界与现实世界交汇的产物。 本文将深入…

CompletableFuture-线程池运行选择

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

Linux和本地Windows如何互传文件(sz和rz指令)

目录 关于 rzsz 注意事项 安装软件 rz的使用&#xff08;本地主机文件传到Windows中&#xff09; sz的使用(Linux中的文件传到本地Windows主机中) 关于 rzsz 这个工具用于 windows 机器和远端的 Linux 机器通过 XShell 传输文件. 安装完毕之后可以通过直接拖拽的方式将文件…

计算机网络相关知识点

谈一谈对OSI七层模型和TCP/IP四层模型的理解&#xff1f; 这两种模型都是网络通信中重要的参考模型,他们的设计和功能有一些区别。 首先OSI&#xff0c;OSI七层模型&#xff0c;也被称为开放系统互联参考模型&#xff0c;是一种在国际标准化组织&#xff08;ISO&#xff09;中…

基于YOLOv8模型的蜜蜂目标检测系统(PyTorch+Pyside6+YOLOv8模型)

摘要&#xff1a;基于YOLOv8模型的蜜蜂目标检测系统可用于日常生活中检测与定位蜜蜂目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的目标检测&#xff0c;另外本系统还支持图片、视频等格式的结果可视化与结果导出。本系统采用YOLOv8目标检测算法训练数据集…

SPA项目之主页面--Mock.js以及组件通信(总线)的运用

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于VueElementUI的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一.Mock.js是什么 二.为什么要使用…

Baumer工业相机堡盟工业相机如何通过BGAPI SDK设置相机的图像剪切(ROI)功能(C#)

Baumer工业相机堡盟工业相机如何通过BGAPI SDK设置相机的图像剪切&#xff08;ROI&#xff09;功能&#xff08;C#&#xff09; Baumer工业相机Baumer工业相机的图像剪切&#xff08;ROI&#xff09;功能的技术背景CameraExplorer如何使用图像剪切&#xff08;ROI&#xff09;功…

【Linux】线程安全

线程互斥互斥相关背景概念 互斥量mutex互斥量接口初始化互斥量函数销毁互斥量互斥量加锁互斥量解锁代码模拟 互斥量实现的逻辑常见锁的概念死锁什么叫做阻塞&#xff1f;产生死锁的四个必要条件如何避免死锁 Linux线程同步同步概念与竞态条件条件变量条件变量函数代码练习 条件…

pytest之parametrize()实现数据驱动

第一个参数是字符串&#xff0c;多个参数中间用逗号隔开 第二个参数是list,多组数据用元组类型;传三个或更多参数也是这样传。list的每个元素都是一个元组&#xff0c;元组里的每个元素和按参数顺序一一对应 传一个参数 pytest.mark.parametrize(‘参数名’&#xff0c;list)…

【Spring Boot】拦截器学习笔记

一、普通拦截器 1&#xff0c;新建类MyWebConfig实现WebMvcConfigurer&#xff0c;实现addInterceptors方法 Overridepublic void addInterceptors(InterceptorRegistry registry) {registry// 不拦截哪些请求.excludePathPatterns("/login")// 拦截哪些请求.addPat…

Kubernetes 上的数据已跨越鸿沟:在 GKE 上运行有状态应用程序的案例

Kubernetes 是当今云原生开发的事实上的标准。长期以来&#xff0c;Kubernetes 主要与无状态应用程序相关&#xff0c;例如 Web 和批处理应用程序。然而&#xff0c;与大多数事物一样&#xff0c;Kubernetes 也在不断发展。如今&#xff0c;我们看到 Kubernetes 上有状态应用程…

在docker中删除none镜像

在构建过Docker镜像的电脑上查看本地镜像列表&#xff0c;有可能看到下图红框中的镜像&#xff0c;在列表中展示为:&#xff1a; 这种镜像在Docker官方文档中被称作dangling images&#xff0c;指的是没有标签并且没有被容器使用的镜像。 官方解释 来自官方的解释如下图红框所…

Springboot配置文件 - 多环境开发、自定义配置文件、多环境开发控制

文章目录 配置文件一、Yaml 文件1.1 修改banner1.2 日志1.3 端口1.4 属性提示消失解决方案 二、Properties 文件三、配置高级3.1 临时属性3.2 临时属性&#xff08;开发环境&#xff09;3.3 配置文件四级分类3.3.1 原始配置文件&#xff08;四级&#xff09;3.3.2 config目录下…

Rust vs C++ 深度比较

Rust由于其强大的安全性受到大量关注&#xff0c;被认为C在系统编程领域最强大的挑战者。本文从语言、框架等方面比较了两者的优缺点。原文: Rust vs C: An in-depth language comparison Rust和C的比较是开发人员最近的热门话题&#xff0c;两者之间有许多相似之处&#xff0c…

少数人的晚餐-补充

与此相关的四篇博客&#xff1a; 坦然~佛系~_坦然 佛系 zhangrelay-CSDN博客 少数人的晚餐_zhangrelay的博客-CSDN博客 ROS1/2机器人课程的价值和规模-CSDN博客 从2050回顾2020&#xff0c;职业规划与技术路径&#xff08;节选&#xff09;补充-CSDN博客 回顾 少数人的晚餐…

手把手教你制作精美的新店开业微传单

如果你准备开设一家新店&#xff0c;那么制作一份具有吸引力的微传单是宣传店铺的重要手段之一。下面&#xff0c;我们将通过乔拓云平台&#xff0c;手把手教你制作一份有吸引力的新店开业微传单。 1. 注册并登录乔拓云账号 首先&#xff0c;你需要在乔拓云官方网站注册一个账号…

加速企业AI实施:成功策略和效率方法

文章目录 写在前面面临的挑战MlOps简介好书推荐 写作末尾 写在前面 作为计算机科学领域的一个关键分支&#xff0c;机器学习在当今人工智能领域中占据着至关重要的地位&#xff0c;广受瞩目。机器学习通过深入分析大规模数据并总结其中的规律&#xff0c;为我们提供了解决许多…

机器学习---BP算法

1. 多级网络 层号确定层的高低&#xff1a;层号较小者&#xff0c;层次较低&#xff0c;层号较大者&#xff0c;层次较高。 输入层&#xff1a;被记作第0层。该层负责接收来自网络外部的信息。 第j层&#xff1a;第j-1层的直接后继层&#xff08;j>0&#xff09;&#xff…