面试经典(10)--归并排序

职场败犬在星巴克梳理了10大经典排序算法(动图+代码) 前些时间看人世间周秉昆辞去木材厂工作后天天骑个单车在外面瞎转还有些不能理解,然而戏如人生、人生如戏。我今天已经开车在外面逛了半天了,“毕业”的事还没跟家里说,现在找了个星巴克坐着,闲着也是闲着,不如来梳理一下自身所学,毕竟也难得有此机会。 以前也零零碎碎发过一些排序算法,但排版都不太好,这次重新整理一次,排序算法是数据结构的重要部分,面试必问,系统地学习很有必要!我最近也在看新的机会,已经有些年没有面试过了,得把基础的东西都捡起来,希望能与大家共同进步! 时间、空间复杂度比较 排序算法 平均时间复 阅读详情

归并排序是面试常考的排序算法,也有一些题目是归并排序的变形,比如数组的逆序对问题,后面我会更新这个算法。归并是典型的分治算法,比较简单,直接上代码。

void merge(int *a,int first,int mid,int last,int *temp)
{
	int i=first,j=mid+1;
	int k=0;
	while(i<=mid && j<=last)
	{
		if(a[i]<=a[j])
		{
			temp[k++]=a[i++];
		}
		else
		{
			temp[k++]=a[j++];
		}
			
	}
	while(i<=mid)
		temp[k++]=a[i++];
	while(j<=last)
		temp[k++]=a[j++];
	for(i=0;i<k;i++)
		a[first+i]=temp[i];
}

void mergeSort(int *a,int first,int last,int *temp)
{
	if(first<last)
	{
		int mid=(first+last)>>1;
		mergeSort(a,first,mid,temp);
		mergeSort(a,mid+1,last,temp);
		merge(a,first,mid,last,temp);
	}
}

复杂度分析:整个归并需要logn趟,俩个有序序列合并成有序时间复杂度o(m+n),因此总的时间复杂度是o(nlgn).其实可以把归并排序看成是二叉树的后续遍历。


来自百度的一张图(18应为10)。

经典排序面试题 经典排序面试题 案例一 已知一个几乎有序的数组,几乎有序是指,如果把数组排好顺序的化,每个元素移动的距离不超过k,并且k相对于数组长度来说很小。请问选择什么方法对其排序比较好。 分析: 时间复杂度为O(N)的排序算法:计数排序、基数排序 不基于比较的排序算法的限制:不适用所有情况。 时间复杂读为O(N^2)的排序算法: 插入排序:插入排序的过程与原始顺序有关,每个元素移动距离不超过k。 对于本题来... 阅读详情

相关推荐

今天会是有offer的一天么:面试时你真的会写归并排序么

UP打算把八大排序算法中最难理解的几种整理一下,分别是归并排序、快排和堆排序。今天先介绍归并排序。 先说一下归并排序的图解 所谓的归并,是将两个或两个以上的有序文件合并成为一个新的有序文件,归并排序是把一个有n个记录的无序文件看成是由n个长度为1的有序子文件组成的文件,然后进行两两归并,如此重复,直至最后形成包含n个归并,得到n/2个长度为2或者1的有序文件,再两两归并,如此重复,直至最后形成...

HZGuilty的博客 4114

GetWindow、GetTopWindow和GetNextWindow

GetWindow  //uCmd 可选值:GW_HWNDFIRST = 0; {同级别第一个}GW_HWNDLAST = 1; {同级别最后一个}GW_HWNDNEXT = 2; {同级别下一个}GW_HWNDPREV = 3; {同级别上一个}GW_OWNER = 4; {属主窗口}GW_CHILD = 5; {子窗口}       函

7980

python面试:实现归并排序(python经典编程案例)

归并排序(Merge Sort)是一种基于分治法的排序算法。它的核心思想是将一个数组分成两个子数组,分别对子数组进行排序,然后将两个有序的子数组合并成一个有序的数组。归并排序的时间复杂度为 O(n log n),是一种稳定的排序算法。

数据知道的博客 3万+

WinAPI: GetNextWindow - 获取指定窗口Z上或Z下的窗口的句柄

为什么80%的码农都做不了架构师?>>> ...

weixin_34144450的博客 531

今天会是有Offer的一天么:面试时你真的会写归并排序么

UP打算把八大排序算法中最难理解的几种整理一下,分别是归并排序、快排和堆排序。今天先介绍归并排序。 先说一下归并排序的图解 所谓的归并,是将两个或两个以上的有序文件合并成为一个新的有序文件,归并排序是把一个有n个记录的无序文件看成是由n个长度为1的有序子文件组成的文件,然后进行两两归并,如此重复,直至最后形成包含n个归并,得到n/2个长度为2或者1的有序文件,再两两归并,如此重复,直至最后形成包含n个记录的有序文件位置,这种反复将两个有序文件归并成一个有序文件的排序方法称为二路归并排序。 废话不多说直接上代码 import java.util.ArrayList; import java.

非华为电脑也能用!华为电脑管家完美安装教程来了

GitHub 上有一个开源项目 ​****​,专门解决“非华为设备无法安装华为电脑管家”的问题。它通过智能模拟 + DLL 劫持技术,绕过官方对硬件型号的检测,让你在联想、戴尔、华硕甚至 DIY 主机上也能流畅使用华为电脑管家!⭐ 项目已获 ​700+ Stars​,社区活跃,持续更新,兼容性优秀!科技不该有围墙。如果你成功在非华为电脑上跑起了 PCManager,欢迎在评论区晒出你的设备型号 + 使用体验!也别忘了把这篇推文分享给同样“眼馋”华为生态的朋友 ~📱 ​关注我们。

程序员朱永胜 4910

归并排序的相关面试题

归并排序的面试题:小和问题,逆序对,大于2倍,区间上的个数

学代码的咸鱼的博客 424

基于YOLO11深度学习的糖尿病视网膜病变智能诊断系统【Python源码+Pyqt5界面+数据集+训练代码】

本文详细介绍如何利用YOLO11深度学习技术构建糖尿病视网膜病变智能诊断系统。项目提供完整的Python源码、PyQt5图形界面、标注数据集及训练代码,实现从图片、视频到摄像头的多模态病变检测,旨在辅助医疗筛查,提升诊断效率。

weixin_29089057的博客 277

算法16:LeetCode_归并排序_相关面试题 (超难)

假设初始序列含义n个记录,则可以看成是n个有序子序列,每个序列的长度为1,然后两两归并,得到【n/2】([x]表示不小于x的最小整数)个长度为2或1的有序咨询;1. 普通两层遍历肯定是可以解出这道题的,但是两层遍历的时间的复杂度是O(N^2). 而归并排序的时间复杂度是 N*logN, 性能上更优。思考: 面试题一是最小和,假设数组为 {5,2,3,4,1},而你使用降序,猜猜得到的最小和会是多少?在一个数组中,一个数左边比它小的数的总和,叫数的小和,所有数的小和累加起来,叫数组小和。

街头小瘪三的专栏 937

WorkBuddy入门到 多Agent团队协作完全指南(附实操代码与配图)

WorkBuddy的Agent Teams功能支持多智能体协作,通过创建AI团队提升复杂任务处理效率。该功能支持自然语言创建团队、任务分配与依赖管理、成员间消息通信(包括直接消息和广播),并提供任务审批机制。典型应用场景包括软件开发、内容创作等协作任务。环境要求WorkBuddy 2026年3月及以上版本,支持Windows和macOS系统。用户可快速创建包含不同角色的AI团队,通过共享任务列表和信箱系统实现协作。高级功能包括委派模式、任务依赖管理和成员自主认领等,适合各类协作场景。

三棱球的专栏 6432

OMNeT++入门指南:从tictoc1到tictoc18的实例解析与实战演练

本文是OMNeT++网络仿真框架的入门实战指南,详细解析了从tictoc1到tictoc18的经典示例。内容涵盖OMNeT++的下载安装、核心三文件(.ned, .cc, .ini)的编写、模块化建模、自定义消息、数据统计与可视化,以及参数化批量仿真等核心技能,帮助读者从零开始掌握这一强大的网络仿真工具。

weixin_29228781的博客 328

Java之归并排序

归并排序的复杂度是 n-1 ①合并方法代码如下: /** * @param arr 排序的原始数组 * @param left 左边有序序列的初始索引 * @param mid 中间索引 * @param right 右边索引 * @param temp 中转数组 */ public static void merge(int[] arr, int left, int mid, int right, int[] temp) {

weixin_41347226的博客 281

领域知识图谱构建的技术流程

因此概念的属性定义十分重要,通常大部分知识库中的概念属性都是采用人工定义等方式生成的,通用知识图谱则可以从开放数据集中获取概念的属性,然后从在线百科中学习实体的属性,并对实体属性进行往上规约从而生成概念的属性。由于百科的分类体系都是经过了百科管理员或是高级编辑人员的校验,其分类系统中的数据可靠性非常高,因此从百科中抽取概念和实体,通常将标题作为实体的候选,而将百科中的分类系统直接作为概念的候选。为了对知识进行合理的组织,更好地描述知识本身与知识之间的关联,需要对知识图谱的模式进行良好的定义。

weixin_43961909的博客 334

tech-interview-for-developer:排序算法对比分析-10大排序算法详解

在软件开发和技术面试中,排序算法是最基础也是最重要的考察点之一。无论是处理海量数据、优化系统性能,还是应对技术面试,掌握各种排序算法的原理、特性和适用场景都至关重要。本文将深入分析10大经典排序算法,帮助开发者建立完整的排序算法知识体系。 ## 排序算法分类体系 ```mermaid flowchart TD A[排序算法] --> B[比较排序] A --> C[非比较排序]...

gitblog_00765的博客 750

YOLOv8【第四章:注意力机制篇·第20节】一文讲透,注意力机制设计原则与选择指南 - 从原理到实践的系统化方法论!

🏆 本文收录于 《YOLOv8实战:从入门到深度优化》,该专栏持续复现网络上各种热门内容(全网YOLO改进最全最新的专栏,质量分97分+,全网顶流),改进内容支持(分类、检测、分割、追踪、关键点、OBB检测)。且专栏会随订阅人数上升而涨价(毕竟不断更新),当前性价比极高,有一定的参考&学习价值,部分内容会基于现有的国内外顶尖人工智能AIGC等AI大模型技术总结改进而来,嘎嘎硬核。    ✨ 特惠福利:目前活动一折秒杀价!一次订阅,永久免费,所有后续更新内容均免费阅读!

**My Coding Family** 896

FAST-LIVO2 源码精读(五):IMU 运动模型、离散传播与去畸变原理

本文是「FAST-LIVO2 激光-惯性-视觉里程计源码精读」专栏第五篇,数学基础篇章(第 4–7 篇)的第二篇。上一篇在 SO(3) 流形上建立了姿态表示与右扰动模型;本篇聚焦 IMU 预积分的核心问题:一帧激光扫描横跨约 100 ms,帧内每一个点的采集时刻各不相同,如何利用 200 Hz 的 IMU 量测将全帧点云统一对齐到帧末时刻?答案完整封装在(587 行)的函数中,本篇逐段拆解其四阶段逻辑,并推导协方差矩阵随误差状态转移矩阵F_x逐帧演化的物理含义。

PX4-SLAM-PNC 156

数据结构面试经典问题汇总

数据结构面试经典问题汇总参考资源:基础深入补充: 参考资源: 基础 数据结构常见面试题 深入 数据结构面试题(三) 数据结构面试必问 数据结构算法常见面试考题 补充: 1.数组和链表的区别,请详细解释。 从逻辑结构来看: a) 数组必须事先定义固定的长度(元素个数),不能适应数据动态地增减的情况。当数据增加时,可能超出原先定义的元素个数;当数据减少时,造成内存浪费;数组可以根据下标直接存取。 b) 链表动态地进行存储分配,可以适应数据动态地增减的情况,且可以方便地插入、删除数据项。(数组中插入、删除

weixin_47219428的博客 1万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

经典面试排序题(快排堆排归并排序)

面试算法题中经常会问到第K大的排序,几分钟手撕快排、堆排、归并排序,并写出第K的代码,以及求逆序对数

布生气 1056

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

数据结构十大经典算法(面试常问)

数据结构十大经典算法一、算法的分类二、术语说明三、时间复杂度1、冒泡排序2、快速排序3、选择排序4、插入排序(Insertion Sort)5、希尔排序(Shell Sort)6、归并排序7、堆排序(Heap Sort)8、计数排序(Counting Sort)9、桶排序(Bucket Sort)10、基数排序(Radix Sort) 本篇参考以下三位博主写的博文 1、算法学习总结(2)——温故十...

lucky多多的博客 2万+

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

[Leetcode]其它经典面试题——python版本

本篇文章根据labuladong的算法小抄介绍部分经典面试题,采用python3实现 文章目录快速选择算法数组中的第K个最大元素,T215分治算法归并排序添加括号的所有方式,T241区间问题删除被覆盖区间,T1288区间合并,T56区间交集,T986字符串乘法字符串相乘,T43二分查找高效判定子序列判断子序列,T392判断子序列列表最长回文子串最长回文子串,T5接雨水接雨水,T42盛最多水的容器,T11括号相关问题有效的括号,T20使括号有效的最少添加,T921平衡括号字符串的最少插入次数,T1541括号生

weixin_52093054的博客 716

可以借助归并排序秒杀的面试题!

归并排序是面试的高频考点,下面我们来一起看看如何借助归并排序解决逆序对,翻转对问题。在 leetcode 上面属于困难题目。大家做题之前可以顺便解决一下这个题目,leetcode 912 ...

Java笔记虾 423

数据结构与算法 - 面试手撕:归并排序的分治实现

摘要 归并排序是一种基于分治思想的高效排序算法,通过递归分解数组并合并有序子数组实现排序。其核心特性包括: 稳定时间复杂度:始终为O(n log n) 排序稳定性:保持相等元素的原始顺序 非原地排序:需O(n)额外空间 本文详解了归并排序的递归与迭代实现,提供完整的Java代码示例,并通过流程图展示分治过程。还探讨了空间优化可能性及工程实践中的取舍,帮助开发者深入理解这一经典算法。 (字数:150)

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

数据结构与算法 - 归并排序:分治思想的经典实现

归并排序是一种基于分治思想的经典排序算法,其核心步骤包括分解、递归排序和合并。本文将详细介绍归并排序的原理、实现和优化方法。通过Mermaid图表展示数组分解与合并过程,并以Java代码实现为例,解析递归排序和双指针合并的具体操作。文章还讨论了算法的时间复杂度(O(nlogn))和空间优化策略,如避免频繁创建临时数组。归并排序以其稳定性和可预测性,在大数据排序和外部排序中具有重要应用价值。无论是算法初学者还是开发者,都能从中获得启发。

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

终极指南:10分钟用动画掌握归并排序的分治思想

归并排序是算法学习中的经典排序算法,通过algorithm-base项目的生动动画演示,即使是算法新手也能轻松理解其核心分治思想。归并排序采用"分而治之"的策略,将复杂问题分解为更小的子问题,然后合并结果得到最终解。 ## 🤔 什么是归并排序? 归并排序这个名字听起来很专业,其实原理很简单——就像公司选拔优秀员工一样!想象一下,一个公司要从各个部门选拔最优秀的员工参加全国比赛: **选拔流

gitblog_00009的博客 1060

10大排序面试突击思路和3个NLogN算法Go语言实现

10大排序面试突击思路和3个NLogN算法Go语言实现 突击思路 中高级以上岗位面试时,基本不会问指数级别时间复杂度的算法,问的最多的就是NLogN的算法:快排、归并和堆排序。堆排序因为基于完全二叉树,个人感觉相对其他2个复杂一些,所以推荐重心放在在快排和归并上,特别说明的一点是:快排务必能手撕代码。 算法复杂度 从最佳一列,我们看到只有3个算法是NlogN级别,也是面试时问的最多的: 推荐学习资源 动画演示:十大经典排序算法(动图演示) 这个文章很经典,看动图会比较直观,但是说实话,三大高级排序算法

xmcy001122的专栏 1983
上一篇: 0-1背包问题
下一篇: 面试经典(9)--求数组的逆序对
OS技术解密
博客等级 码龄16年 3760粉丝 189原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值