排序算法-归并排序

Leetcode链接:. - 力扣(LeetCode)

归并:将原始数组划分为若干个子数组,然后将这些子数组分别排序,最后再将已排序的子数组合并成一个有序的数组。是一种分治思想

思路:

1.分

2.治

3.怎么治

将两个已经有序的子序列合并成一个有序序列,比如最后一次合并要将[4,5,7,8]和[1,2,3,6]两个已经有序的子序列,合并为最终序列[1,2,3,4,5,6,7,8]

3.1定义一个help数组,定义两个指针p1和p2,p1指向第一个数组的第一个位置,p2指向第二个数组的第二个位置

3.2 从头开始判断两个数组中的数谁大谁小,小的放入help数组中,指针向后移动,直到有一个数组的所有数都放入了help数组中,然后直接把另一个数组的剩下数放入到help数组中去。最终help数组为两个已经有序的子序列合并的那一个有序序列

class Solution {public int[] sortArray(int[] nums) {process(nums,0,nums.length-1);return nums;}public void process(int[] nums ,int l,int r){if(l==r){return;}int midIndex=l+((r-l)>>1);process(nums,l,midIndex);process(nums,midIndex+1,r);//将两个已经有序的子序列合并成一个有序序列merge(nums,l,midIndex,r);}public void merge(int[] nums,int l,int midIndex,int r){int[] help=new int[r-l+1];int i=0;int p1=l;int p2=midIndex+1;while(p1<=midIndex && p2<=r){help[i++]=nums[p1]<=nums[p2] ? nums[p1++] :nums[p2++];}while(p1<=midIndex){help[i++]=nums[p1++];}while(p2<=r){help[i++]=nums[p2++];}for(int j=0;j<help.length;j++){nums[l+j]=help[j];}}
}

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

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

相关文章

Codeforces TypeDB Forces 2023 C. Remove the Bracket【上下界DP】

C. Remove the Bracket 题意 给定一个长度为 n n n 的整数数组 a a a 和一个非负整数 s s s 要求 ∀ i ∈ [ 2 , n − 1 ] , 选定两个整数 x i , y i &#xff0c;满足 x i y i s 且 ( x i − s ) ( y i − s ) ≥ 0 \forall i \in [2,n - 1],选定两个整数 x_i, y_i&am…

恶意勒索Word文档模版注入分析

文章目录 前言1、工具&#xff1a;2、IOC样本&#xff1a;3、样本提取4、恶意文档分析参考手册 恶意的文档执行流程一、使用 OLEDUMP 和 OLEVBA 分析Word 文档1、OlEDUMP2、OLEVBA 二、使用 Detect-It Easy 识别文件类型-简单三、使用 7-zip 探索 OOXML 文档并查找模板注入四、…

程序员为什么要一直写 bug ?

程序员并不是故意写bug的&#xff0c;bug的产生通常是由多种因素导致的&#xff0c;例如&#xff1a; 需求理解不足&#xff1a;如果程序员没有完全理解项目的需求或者功能要求&#xff0c;可能会在编程过程中遗漏一些重要的细节&#xff0c;导致bug的产生。编程经验不足&…

Three.js真实相机模拟

有没有想过如何在 3D Web 应用程序中模拟物理相机&#xff1f; 在这篇博文中&#xff0c;我将向你展示如何使用 Three.js和 OpenCV 来完成此操作。 我们将从模拟针孔相机模型开始&#xff0c;然后添加真实的镜头畸变。 具体来说&#xff0c;我们将仔细研究 OpenCV 的两个失真模…

是谁?写的Java神作一出版就获Jolt图书大奖【抽奖赠书】

送书活动 1️⃣参与方式&#xff1a;点此参与抽书抽奖 2️⃣获奖方式&#xff1a;小程序随机 抽5位&#xff0c;每位小伙伴一本《Effective Java中文2024版》 3️⃣活动时间&#xff1a;截止到 2024-4-6 12:01:00 注&#xff1a;所有抽奖活动都是全国范围免费包邮到家&#xff…

openldap(一):简介和安装

目录 1 OpenLDAP简介1.1 LDAP介绍1、什么LDAP2、为什么要使用LDAP3、LDAP 的特点4、LDAP常用关键字5、LDAP的objectClass6、LADP使用场景 1.2 OpenLDAP介绍1、什么OpenLDAP2、OpenLDAP特点3、OpenLDAP的组件 2 OpenLDAP安装3 简单使用3.1 创建用户1、创建ou2、创建Group 3、创建…

Oracle基础-PL/SQL编程 备份

1、PL/SQL简介 PL/SQL块结构 约定&#xff1a;为了方便&#xff0c;本文后面把PL/SQL简称PL。 PL程序都是以块&#xff08;BLOCK&#xff09;为基本单位&#xff0c;整个PL块分三部分&#xff1a;声明部分&#xff08;使用DECLARE开头&#xff09;、执行部分(以BEGIN开头)和异…

springboot之RESTful接口与Swagger

一、RESTful GET获取资源、POST新建资源、PUT更新资源、DELETE删除资源。 RESTful两大特性 1、安全性&#xff1a;GET请求不会引起资源本身改变。 2、幂等性&#xff1a;对一个接口请求和多次请求返回的资源应该一致。 2xx&#xff1a;成功 4xx&#xff1a;客户端错误。 …

windows 设置共享文件夹

1、选择您要共享的文件夹&#xff0c;并右键点击该文件夹。在弹出的菜单中&#xff0c;选择“属性”选项。属性窗口中&#xff0c;选择“共享”选项卡 2、在共享选项卡中&#xff0c;点击“高级共享”按钮&#xff0c;勾选“共享此文件夹”选项。可以根据需要设置共享文件夹的…

全数字化病理,“根深”才能“叶茂”

现代医学之父William Osler曾言&#xff1a;病理学乃医学之本。 作为研究人体疾病发生的原因、发病机制、病理变化以及疾病过程中机体的形态结构、功能代谢变化和病变转归的一门基础医学科学&#xff0c;病理学一直被视为基础医学与临床医学之间的“桥梁学科”&#xff0c;在医…

数码论坛系统的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)电子科技数码爱好者交流信息新闻畅聊讨论评价

本项目包含可运行源码数据库LW&#xff0c;文末可获取本项目的所有资料。 推荐阅读300套最新项目持续更新中..... 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含ja…

【turtle海龟先生】神奇的“圆”,画,太极圈,铜钱古币

turtle画圆三步法 步骤: 1、导入turtle库 2、确定半径&#xff0c;画圆(circle ) 3、结束(done ) turtle 库中提供一个直接画圆的函数 turtle.circle&#xff08;半径&#xff09;#半径单位为像素 例&#xff1a; turtle.circle ( 100 ) 表示绘制一个半径为100像素长度的圆形 …