拉勾数据结构课程之归并排序

ElasticSearch集群搭建 docker安装es集群 阅读详情

 

归并排序原理:

一开始先把数组从中间划分成两个子数组,一直递归的把子数组划分成更小的子数组,直到子数组里面只有一个元素才开始排序。

排序的方法就是按照大小顺序合并两个元素,接着依次按照递归的返回顺序,不断地合并排好序的子数组,直到最后把整个数组的顺序排好。

归并 排序合并:

 合并函数实现的其实就是如何把两个有序的数组合并成一个数组

代码一:

比较常见的有序数组合并代码,也比较好理解

public  void merge(int[] nums,int low,int mid,int high){
		int copy[]=nums.clone();
		int i=low,k=low,j=mid+1;
		while(i<=mid&&j<=high){
			if(copy[i]<copy[j]){
				nums[k++]=copy[i++];
			}else{
				nums[k++]=copy[j++];
			}
		}
		while(i<=mid) nums[k++]=copy[i++];
		while(j<=high) nums[k++]=copy[j++];
}

代码二:比较简洁,理解难度较难 

public void  mergeSortInstance(int[] nums,int low,int high){
		if(low>=high) return;
		int mid=low+(high-low)/2;
		mergeSortInstance(nums,low,mid);
		mergeSortInstance(nums,mid+1,high);
		
        merge(nums,low,mid,high);
	}
	/**
	 * 注释代码为错误代码,功能呢实现逻辑是不对的,而且也会抛出ArrayIndexOutOFBund
	 * 虽然错误代码与正确代码看起来就是 if条件执行的先后顺序不一样,但是这不一样就会导致整个代码的错误。在错误代码中,每次都是先判断i指针与指针指向的两个数的大小
	 * 例如对 1、5、9、7,8,6四个数归并,当i=0,mid=0,j=1时 执行 nums[k++]=copy[i++] 此时nums中的 值为1;i=1,k=1  执行nums[k++]=copy[j++]此时nums中的 值为1,5; k=2,j=2 退出
	 * 当i=2,mid=2,j=3时,执行nums[k++]=copy[j++]; 此时nums中的 值为1,5,7; 此时k=2,j=4  执行nums[k++]=copy[j++] 此时nums中的 值为1,5,7,8; 
	 * 
	 * @param nums
	 * @param low
	 * @param mid
	 * @param high
	 */
	public  void merge(int[] nums,int low,int mid,int high){
		int copy[]=nums.clone();
		int i=low,k=low,j=mid+1;
		
		/*while(k<=high){
			if(copy[i]<copy[j]){
				nums[k++]=copy[i++];
			}else if(copy[j]<copy[i]){
				nums[k++]=copy[j++];
			}else if(i>mid){
				nums[k++]=copy[j++];
			}else{
				nums[k++]=copy[i++];
			}
			
		}*/
		while(k<=high){
			
			if(i>mid)
				nums[k++]=copy[j++];
			else if(j>high)
				nums[k++]=copy[i++];
			else if(copy[j]<copy[i])
				nums[k++]=copy[j++];
			else
				nums[k++]=copy[i++];
		}
		
	}

算法分析:稳定排序算法

空间复杂度:合并N个元素需要分配一个大小为n的额外数组,合并完成之后该数组被释放,空间复杂度为o(n)。

时间复杂度:T(n)=2*T(n/2)+O(n)  整体的复杂度为O(nlogn)

基于 Qt 的轻量化工业组态软件设计与实现 本文设计并实现了一种基于Qt框架的轻量化工业组态软件,解决了传统组态软件体积庞大、部署复杂等问题。该软件采用模块化架构,集成可视化图形编辑、设备数据采集、脚本扩展等核心功能,具有跨平台运行、资源占用低、启动速度快等特点。通过关键技术优化,实现了高效稳定的数据采集、脚本控制和网络通信,可广泛应用于工业机器人HMI、小型PLC监控等轻量化场景。测试结果表明,该软件体积约30MB,运行内存占用60-80MB,启动时间1.2秒,满足工业轻量化监控需求。未来可扩展更多工业组件和协议支持,进一步提升应用价值。 阅读详情

相关推荐

使用 Unity Sentis 和 Compute Shader,det_10g.onnx 进行高效人脸五官定位

在计算机视觉领域,人脸五官定位是一个重要的任务。本文将介绍如何使用 Unity Sentis 和 Compute Shader,结合模型,实现高效的人脸五官定位。我们将详细讲解每一步骤,并提供完整的代码示例。

m0_55632444的博客 2393

拉勾数据结构课之快速排序算法

快速排序算法: 实现代码一: /*快速排序 以第一个数为基准点,把大于基准点的放在基准点右边,小于基准点的放在基准点左边。 再把左边的当作一个新的数组1,右边的当作一个新数组2,分别重新选取新的数组1,2的基准点不断执行小于基准点的放左边,大于基准点的放右边 不断划分左右数组序列,直到左右数组序列只剩一个数 实现方法: 定义两个哨兵i,j,j每次先从后往前找到第一个小于基准点的数,如果此时i,j,没有相遇,i在 j找到数后从前往后找到第一个大于基准点的数

learner_up的博客 260

避开这些坑!智鼎MAP性格测试高分指南(附互联网/国企/外企答题模板)

本文深入解析智鼎MAP职业性格测试的核心逻辑与常见陷阱,提供针对互联网、国企、外企三大行业的差异化答题策略与实战模板。帮助求职者理解测试本质,避开追求完美人设、忽视程度副词等心理陷阱,塑造与目标岗位高度匹配的职业画像,从而在招聘关键环节脱颖而出。

rainy的博客 993

scala 排序算法 归并排序

scala 排序算法 归并排序 归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有 序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并 为整体有序序列。 package com.xing.hai /** * Created by xxxx on 3/1/2017. * 49 38 6...

252

深入解析经典蓝牙连接:从HCI命令到LMP协议的完整流程

本文深入解析经典蓝牙连接的完整流程,从设备发现、寻呼建立物理链路,到安全配对与加密的每一步。通过对照HCI LOG与AIR LOG,详细拆解了HCI命令与LMP协议报文的对应关系,帮助开发者精准定位连接问题,掌握蓝牙调试的核心方法。

weixin_29260291的博客 451

【OpenClaw从入门到精通】第03篇:吃透Gateway/Skills/ClawHub核心概念(2026实测+避坑)

本文针对OpenClaw新手易混淆的核心概念痛点,以通俗类比+实操演示拆解OpenClaw核心、Gateway、Skills、ClawHub四大组件。通过“数字员工团队”类比明确各组件定位:OpenClaw核心是“老板”(调度中心)、Gateway是“前台+后勤”(后台进程)、Skills是“专业员工”(功能插件)、ClawHub是“人才市场”(技能商店)。补充版本更名史、技能加载优先级、ClawHub与GitHub区别等关键细节,结合“AI融资新闻查询并邮件推送”虚拟案例演示组件协同流程,梳理5个高频认知

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 5041

拉勾教育 重学数据结构与算法 13 | 排序:经典排序算法原理解析与优劣对比

什么是排序问题; 冒泡排序; 插入排序; 插入排序和冒泡排序算法的异同点; 归并排序; 快速排序;

Portia356的博客 362

【数据集4】GSWP3数据集详解

简介GSWP3数据集

WW、forever的博客 1367

6月程序员薪资统计出炉!前端薪资差距高达5倍!还躺平?

*年薪30W起步,100W踮踮脚也够得到!**劝大家一定进大厂的话就不多说了!当然,各大厂之间也有较量,能拿哪家的 Offer,咱们各凭本事!但有一点非常明确!号下的朋友总留言问,怎么进大厂?怎么能要到好的 base?答案显而易见,进大厂,拿高薪就一定要不断提升自己的技术!这里有一份分享给大家。内涵,想要进阶自身技能的前端,???(不同场景下,凭借工程化方式高效开发项目)(掌握核心框架原理,提高代码质量,体系化劣实技术能力)(根据业务开发场景,选择并优化技术开发方案)

2401_84419009的博客 359

2026年职业院校技能大赛中职移动应用与开发—数字生活APP原型设计参考答案(含素材)

本模块以产品原型为目标,考查参赛选手熟练收集、分析和归纳客户需求,清晰梳理业务流程,熟练使用UI设计软件进行产品UI/UE设计,掌握正确的UI配色方案,设计出符合业务逻辑的人体工学移动App 原型优秀作品。

我是网络安全兼技能大赛工程师,专注网络安全技术学习与技能大赛实战!持续分享最新的技术文章,帮你少走弯路,一起在技术赛道上进步~ 568

AI智能体在化学中的伦理问题:7个案例,架构师如何应对?

AI在化学中的应用早已不是新鲜事:药物发现中用AI预测分子活性(比如AlphaFold预测蛋白质结构)、化工生产中用AI优化合成路线(降低成本30%+)、材料研发中用AI设计新型电池材料(缩短研发周期5年)……但随着AI从“辅助工具”升级为“自主决策智能体”(比如能自动调整反应条件的“化学机器人”),伦理风险开始从“潜在隐患”变成“真实事故”。AI在化学中会踩哪些伦理“坑”?(用案例具象化)这些“坑”的底层逻辑是什么?(从技术到价值观的链条)架构师能做什么?

AI 算法实战派 1363

看完不会的来打我!12年高级工程师的“飞升之路”,全网疯传

开头 经常会有人问:“现在学习Android开发还有前景?”我的看法是现在只是市场趋于平稳了,对开发人员的要求越来越好了,这并不代表没有前景了。 移动开发不等于App开发,所有新的技术浪潮其实都可以融入到移动开发的体系里,比如IOT、音视频、边缘计算、VR/AR,我们要做的,只是打好基础,随时准备战斗。其次,从心态上,我觉得我们千万不要把时间浪费在纠结问题上,而是应该放在解决问题上。“王者荣耀”“吃鸡”并不能解决我们的焦虑,拥抱变化,才能拥有未来,让我们共勉。 移动端的招聘中高端的职位还是很多的,看了下拉勾

fanzhang_vip0723的博客 151

UE4动作游戏实例RPG Action解析二:GAS系统播放武器绑定的技能,以及GE效果

官方实例激活技能通过装备系统数据激活,我先用武器数据资产直接激活官方实例蒙太奇播放是自定义的AbilityTask,我先用更简单的方法实现效果1.1.1 插件启用AbilitySystem1.1.2 PlayerCharacter绑定技能组件AbilitySystemComponent 1.1.3 技能初始化,AbilitySystemComponent->GiveAbility 把上节获取到的默认武器绑定的技能GameAbility 添加到ASC组件 1.2、创建一个GameplayAbili

yuchenwuhen的专栏 1280

Java线程池中的线程复用是如何实现的?万字解析!

前言 从3月份开始,打算找工作,一个偶然的机会,拉勾上一个蚂蚁金服的师兄找到我,说要内推,在此感谢姚师兄,然后就开始了蚂蚁金服的面试之旅。把简历发过去之后,就收到了邮件通知,10个工作日联系我,请耐心等待。 没过2天就接到一个杭州的座机,说要约我进行电话面试,效率还是挺高,然后当天晚上就进行了一面。下班后,吃了饭,专门找了一条人比较少的小路,到了7点,电话准时打过来了。 一面 介绍项目 java 线程池的实现原理,threadpoolexecutor关键参数解释 hashmap的原理,容量为什么是2的幂

m0_56301848的博客 162

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

为什么选择dict_build?5大理由爱上这款中文新词发现工具

**dict_build 是一款自动构建中文词库的开源新词发现工具**,只需提供一份 UTF-8 编码的原始文本,就能自动抽取高频新词,并输出词频、互信息、左右熵、位置成词概率等结构化结果,堪称 NLP 入门者和词库维护者的效率神器。无论是研究中文分词、做舆情分析,还是构建行业词典,dict_build 都能帮你从海量文本中快速"挖"出真正有价值的词汇,无需任何人工标注。下面用 5 大理由告诉你,

gitblog_00719的博客 686

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

招行信用卡中心开发岗笔试复盘:考点、避坑与高分策略

银行系科技岗校招笔试正逐渐向互联网公司看齐,考察重点从行测转向计算机基础、数据结构与算法、数据库原理等硬核技能。这类笔试不仅要求候选人理解TCP握手、B+树索引、事务隔离级别等核心概念,更要求具备实际编码与边界处理能力。对于目标为银行IT开发岗位的求职者,掌握系统化的备考路线与时间分配策略至关重要。本文以招商银行信用卡中心2019秋招第一批开发岗笔试为样本,复盘真实题型、考点覆盖、在线编程平台的操作细节,并给出避坑指南与复习建议,帮助读者快速摸清银行系技术笔试的考察逻辑与通关要点。

weixin_33860528的博客 346

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

2020年Android开发最新整理阿里巴巴、字节跳动、小米面经,你不看看吗?

7:binder工作原理。8:ActivityThread,Ams,Wms的工作原理。9:如果工作中需要修改framework,你如何寻找切入点。电话面试就这么多内容,自我感觉给回答打了75分,然后就是等通知;又隔了两天,阿里的HR打电话让我去指定地点面试,心里有点紧张,因为想给马云打工的人太多,竞争激烈程度可想而知。

2501_90358956的博客 804

2024Android大厂面试经验(附大厂面试真题解析大全)

看到这篇文章的人不知道有多少是和我一样的Android程序员。35岁,这是我们这个行业普遍的失业高发阶段,这种情况下如果还不提升自己的技能,进阶发展,我想,很可能就是本行业的职业生涯的终点了。我们要有危机意识,切莫等到一切都成定局时才开始追悔莫及。只要有规划的,有系统地学习,进阶提升自己并不难,给自己多充一点电,你才能走的更远。千里之行始于足下。这是上小学时,那种一元钱一个的日记本上每一页下面都印刷有的一句话,当时只觉得这句话很短,后来渐渐长大才慢慢明白这句话的真正的含义。

2401_85122662的博客 398

Java后端求职实战:非科班如何在二线城市拿下12K自研Offer

Java作为企业级应用开发的核心语言,其技术生态涵盖JVM、并发编程、框架原理与数据库优化等多个关键领域。理解Java内存模型、垃圾回收机制及并发控制原理,是构建高性能、高可用系统的技术基石。这些底层知识不仅能帮助开发者有效诊断和解决OOM异常等线上问题,更能提升代码质量与系统稳定性。在实际工程实践中,结合设计模式与合理的环境配置,可以应对复杂的业务场景,如高并发访问、分布式事务等挑战。本文聚焦Java后端求职,通过拆解一个非科班同学成功斩获二线城市12K自研岗位的案例,系统梳理了从技术栈聚焦、项目经验包装

weixin_30797199的博客 400

Python开发实习全攻略:从小白到转正的18周实战之旅

Python以其简洁的语法、丰富的生态和广泛的应用场景(Web开发、数据分析、人工智能、自动化运维等),成为众多企业招聘实习生的热门技术栈。本文将围绕“Python开发工程师”实习岗位,系统性地解答这三个核心问题,帮助你理清思路,更有准备地开启第一段职业旅程。无论你是大二/大三正在寻找第一份实习,还是已经拿到Offer准备入职,这篇文章都能为你提供有价值的参考。这是你的“基础版”简历,需要清晰展示你的技术栈、项目经历和教育背景。理解这两者的区别,能帮助你更好地适应实习,并最大化实习价值。

热爱技术与前沿创新,深耕科技领域,在科创中精进自我;探索技术乐趣,分享技术干货与成长心得,以技术为伴,热爱生活,在科创与生活中双向成长。 268

如何正确的计算两个数的平均数

求平均数

learner_up的博客 1万+

java 爬虫之使用jsoup爬取页面

需求: 爬取出所有号段,并找到他们对应的运营商和所属地。 添加依赖: &lt;dependency&gt; &lt;groupId&gt;org.jsoup&lt;/groupId&gt; &lt;artifactId&gt;jsoup&lt;/artifactId&gt; &lt;version&gt;...

learner_up的博客 1009

HashMap(红黑树,线程不安全)详解

何为hashmap 利用hash表原理进行数据存储的集合。线程不安全。 jdk1.7采用数组加链表进行存储,当遇到冲突时,利用链表存储冲突的数据。利用头插法操作链表,hashmap进行数据查询的时间复杂度取决于链表长度,时间复杂度为O(n)。在高并发的情况下会出现循环链表死循环和数据丢失。 jdk1.8采用数组加链表加红黑树进行存储,当遇到冲突时,当链表长度大于8(TREEIFY_THRESHOLD)时会把链表存储转换为红黑树进行存储,利用尾插法操作链表,hashmap进行数据查询的时间复杂度取决于红

learner_up的博客 1003

Java json 字符串处理

json 字符串介绍: 示例: "adslot":{"id":"3169","bidfloor":10.0,"bidfloorcur":"CNY","count":"1","instl":0, "banner":{"w":1080,"h":1920,"pos":0,"battr":[]}, "nativ":null,"video":null,"is_splash_screen":1, "bi...

learner_up的博客 617

集合框架

集合框架的概述: 集合代表了一组对象,java中的集合框架则是定义了一套规范,用来表示操作的集合,使具体操作和实现细节解耦,而这些操作就是增删查改。她由三部分组成,具体包括定义集合的行为的接口,接口的实现类,工具类。接口如:Collection、List、Map,实现类如:ArrayList、LinkedList、HashMap等,工具类如:Collections,Arrays. 集合和数组的区

learner_up的博客 260

JavaScript 基础知识总结

1.js面向对象学习 js对象中的prototype属性: 用于给js中的特定类声明一个通用的变量或者函数。即用类名.prototype.声明的属性或者方法存在于每一个该类的对象中。 该属性存在于每一个构造器中 ...

learner_up的博客 225
上一篇: 拉勾数据结构课之快速排序算法
下一篇: hadoop shuffle 过程理解
date-date
博客等级 码龄9年 6粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值