漫画:什么是归并排序?

基于JAVA的GB28181实现之SIP服务核心组件解析 本文深入解析了基于JAVA的GB28181标准中SIP服务的核心组件实现,包括协议栈选择、消息处理引擎、事务管理器等关键技术点。通过实战案例分享海康威视、大华设备的特殊处理技巧,并提供性能优化和常见问题排查指南,帮助开发者高效构建稳定的视频监控系统。 阅读详情

 

 

—————  第二天  —————

 

 

 

 

 

 

————————————

 

 

 

 

 

 

 

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1uploading.4e448015.gif转存失败重新上传取消

 

 

举个例子,有A、B、C、D、E、F、G、H一共8个武术家参考参加比武大会。

 

第一轮,两两一组,有4名选手胜出(四分之一决赛)

 

第二轮,两两一组,有两名选手胜出(半决赛)

 

第三轮,仅剩的两人一组,冠军胜出(总决赛)

 

 

 

 

归并排序和擂台赛,有什么相同和不同之处呢?让我们以下面这个数组来举例说明:

 

 

归并排序就像是组织一场元素之间的“比武大会”,这场比武大会分成两个阶段:

 

1.分组

假设集合一共有n个元素,算法将会对集合进行逐层的折半分组。

 

第一层分成两个大组,每组n/2个元素;

第二层分成4个小组,每组n/4个元素;

第三层分成8个更小的组,每组n/8个元素;

......

一直到每组只有一个元素为止。

 

这样一来,整个数组就分成了一个个小小的“擂台”。

 

 

 

2.归并

既然分了组,接下来就要开始“比武”了。

 

归并排序和擂台赛有一个很大的不同,就是擂台赛只需要决定谁是老大,而并不关心谁做老二和老三;归并排序的要求复杂一些,需要确定每一个元素的排列位置。

 

因此,当每个小组内部比较出先后顺序以后,小组之间会展开进一步的比较和排序,合并成一个大组;大组之间继续比较和排序,再合并成更大的组......最终,所有元素合并成了一个有序的集合。

 

 

 

这个比较与合并的过程叫做归并,对应英文单词merge,这正是归并排序名字的由来。

 

 

 

归并操作需要哪三个步骤呢?我们以两个长度为4的集合为例:

 

 

第一步,创建一个额外大集合用于存储归并结果,长度是两个小集合之和。(p1,p2,p是三个辅助指针,用于记录当前操作的位置)

 

 

第二步,从左到右逐一比较两个小集合中的元素,把较小的元素优先放入大集合。

 

由于1<2,所以把元素1放入大集合,p1和p各右移一位:

 

 

由于2<3,所以把元素2放入大集合,p2和p各右移一位:

 

 

由于3<7,所以把元素3放入大集合,p1和p各右移一位:

 

由于5<7,所以把元素5放入大集合,p1和p各右移一位:

 

 

由于6<7,所以把元素6放入大集合,p1和p各右移一位:

 

 

此时左侧的小集合已经没有元素可用了。

 

第三步,从另一个还有剩余元素的集合中,把剩余元素按顺序复制到大集合尾部。

 

 

这样一来,两个有序的小集合就归并成了一个有序的大集合。

 

 


 
  1. static public void mergeSort(int[] array, int start, int end){

  2. if(start < end){

  3. //折半成两个小集合,分别进行递归

  4. int mid=(start+end)/2;

  5. mergeSort(array, start, mid);

  6. mergeSort(array, mid+1, end);

  7. //把两个有序小集合,归并成一个大集合

  8. merge(array, start, mid, end);

  9. }

  10. }

 

  1.  

  2.  

  3. static private void merge(int[] array, int start, int mid, int end){

  4. //开辟额外大集合,设置指针

  5. int[] tempArray = new int[end-start+1];

  6. int p1=start, p2=mid+1, p=0;

  7. //比较两个小集合的元素,依次放入大集合

  8. while(p1<=mid && p2<=end){

  9. if(array[p1]<=array[p2])

  10. tempArray[p++]=array[p1++];

  11. else

  12. tempArray[p++]=array[p2++];

  13. }

  14. //左侧小集合还有剩余,依次放入大集合尾部

  15. while(p1<=mid)

  16. tempArray[p++]=array[p1++];

  17. //右侧小集合还有剩余,依次放入大集合尾部

  18. while(p2<=end)

  19. tempArray[p++]=array[p2++];

  20. //把大集合的元素复制回原数组

  21. for (int i=0; i<tempArray.length; i++)

  22. array[i+start]=tempArray[i];

  23. }

 

  1.  

  2.  

  3. public static void main(String[] args) {

  4. int[] array = { 5, 8, 6, 3, 9, 2, 1, 7 };

  5. mergeSort(array, 0, array.length-1);

  6. System.out.println(Arrays.toString(array));

  7. }

 

 

 

 

 

 

 

 

 

 

 

解锁SPWM电压利用率:三次谐波注入幅值的黄金分割点 本文深入探讨了SPWM电压利用率的提升方法,重点介绍了三次谐波注入技术及其黄金分割点(1/6比例)。通过数学推导和工程实践,揭示了如何通过特定幅值的三次谐波注入将电压利用率从86.6%提升至115%,与SVPWM相当。文章还提供了实验室调试流程和DSP实现代码,帮助工程师优化逆变器设计。 阅读详情

相关推荐

5分钟搞定Vivado IP核的VCS仿真:从Export脚本到Verdi波形查看全流程

本文详细介绍了如何利用Vivado的Export Simulation功能,快速搭建Vivado IP核的VCS与Verdi联合仿真环境。通过自动化脚本生成、FSDB波形配置及高效调试技巧,实现从工程导出到波形查看的全流程,大幅提升FPGA验证效率,尤其适合IC验证工程师和竞赛团队。

weixin_29306261的博客 482

漫画:史上最生动的「归并排序」

那我们借用 cs50 里的例子,比如要把一摞卷子排好序,那用并归排序的思想是怎么做的呢? 首先把一摞卷子分成两摞; 把每一摞排好序; 把排好序的两摞再合并起来。 感觉啥都没说? 那是因为上面的过程里省略了很多细节,我们一个个来看。 首先分成两摞的过程,均分,奇偶数无所谓,也就是多一个少一个的问题; 那每一摞是怎么排好序的? 答案是用同样的方法排好序。 排好序的两摞是怎么合并起来的? 这里需要借助两个指针和额外的空间,然后左边画一个彩虹????右边画个龙????,不是,是左边拿一个数,右

码农田小齐 1104

ArcFace vs 传统算法:实测MTCNN+ArcFace在PyCharm中的识别准确率(含完整对比数据)

本文通过PyCharm开发环境实测MTCNN+ArcFace组合在人脸识别中的性能表现,并与传统算法进行多维度对比。实验数据显示,ArcFace在LFW数据集上达到99.83%的准确率,显著优于传统方法。文章还提供了完整的代码实现和工程优化建议,为开发者提供实用的技术参考。

醉三国 233

漫画:“排序算法” 大总结

冒泡排序: 漫画:什么是冒泡排序? 选择排序: 漫画:什么是选择排序? 插入排序: 漫画:什么是插入排序? 此外还有冒泡排序的变种,鸡尾酒排序: 漫画:什么是鸡尾酒排序? 第三梯队的排序算法有什么共同点呢?它们的平均时间复杂度都是O(n^2)。 冒泡排序、选择排序、插入排...

~~ LINUX ~~ 302

保姆级避坑指南:用IWR6843ISK毫米波雷达实现区域检测,从软件安装到可视化调试全流程

本文提供IWR6843ISK毫米波雷达区域检测的全流程实战指南,涵盖环境搭建、固件烧录、可视化工具配置及性能优化等关键步骤。重点解决软件版本兼容性、烧录失败等常见问题,帮助开发者高效实现精准区域检测,避免开发过程中的常见陷阱。

weixin_42653691的博客 375

PySide6 vs PyQt6:新手如何根据Python版本选择GUI库?附版本兼容性测试

本文针对Python GUI开发新手,详细对比了PySide6与PyQt6的核心差异,并提供了基于Python 3.8至3.12等不同版本的兼容性实测数据与选择建议。文章重点分析了版本选择策略,帮助开发者根据自身Python环境、项目需求(如与matplotlib集成)及许可证考量,做出最合适的决策,并附有安装验证与避坑指南。

weixin_29094539的博客 703

漫画:什么是快速排序?(完整版)

  点击上方“程序员小灰”,选择关注公众号 有趣有内涵的文章第一时间送达!   —————  第二天  ————— public class QuickSort { public static void quickSort(int[] arr, int startIndex, int endIndex) {   ...

caofengtao1314的专栏 1456

Acer宏碁暗影骑士擎AN515-58原厂系统恢复指南:从ISO镜像到完整出厂设置

本文详细介绍了为Acer宏碁暗影骑士擎AN515-58游戏本恢复原厂系统的完整指南。从准备工作、数据备份到下载官方镜像、制作恢复U盘,再到BIOS设置与恢复流程,一步步教你如何将系统完整还原至出厂状态,确保所有硬件驱动、NITROSENSE控制中心等专属优化功能恢复正常,解决系统卡顿、功能异常等问题。

weixin_29271263的博客 1097

归并排序递归实现&迭代实现

//递归代码实现归并排序 #include<iostream> #include"stdio.h" using namespace std; #define MAXSIZE 10 void Mering(int * p1, int p1_size, int *p2, int p2_size) { int i=0, j=0, k=0, m;//其中i,j是p1,p2的指针 int ...

yimixgg的博客 409

Python入门实战:Python生物信息学编程基础

本文旨在为生物学背景的研究人员和对生物信息学感兴趣的程序员提供一个全面的Python生物信息学编程入门指南。我们将从Python基础知识开始,逐步深入到生物信息学特定的工具和技术,最终达到能够独立开发生物信息学分析程序的水平。Python编程基础生物信息学常用数据结构和算法DNA和蛋白质序列分析基因组数据处理生物信息学数据可视化Biopython库的使用实际项目案例背景介绍:概述文章目的、范围和预期读者核心概念与联系:介绍Python和生物信息学的基本概念。

AI架构师小马 1513

算法真的是个很有用的东西,通过python或者golang实现对N张图片的自动排版,每张图片的长和宽都不一样,有的是横图,有的是竖图,最终需要生成一张完整的矩形图片

算法真的是个很有用的东西,通过python或者golang实现对N张图片的自动排版,每张图片的长和宽都不一样,有的是横图,有的是竖图,最终需要生成一张完整的矩形图片。

代码讲故事 503

漫画:什么是归并排序算法?

归并排序是建立在归并操作的一种高效的排序方法,该方法采用了分治的思想,比较适用于处理较大规模的数据,但比较耗内存,今天我们聊聊归并排序。

帅地 635

【WRF工具】WRF 模型输出可视化工具 RIP4

【WRF工具】WRF 模型输出可视化工具 RIP4

WW、forever的博客 1594

归并排序 c++_漫画:“排序算法” 大总结

​冒泡排序:漫画:什么是冒泡排序?​mp.weixin.qq.com选择排序:漫画:什么是选择排序?​mp.weixin.qq.com插入排序:漫画:什么是插入排序?​mp.weixin.qq.com此外还有冒泡排序的变种,鸡尾酒排序:漫画:什么是鸡尾酒排序?(修订版)​mp.weixin.qq.com第三梯队的排序算法有什么共同点呢?它们的平均时间复杂度都是O(n^2)。冒泡排序、选择排序、插入...

weixin_39761422的博客 130

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

归并排序 java_「Java排序算法」趣漫画:什么是归并排序?

————————————————————第二天——————————————————————举个例子,有A、B、C、D、E、F、G、H一共8个武术家参考参加比武大会。第一轮,两两一组,有4名选手胜出(四分之一决赛)第二轮,两两一组,有两名选手胜出(半决赛)第三轮,仅剩的两人一组,冠军胜出(总决赛)归并排序和擂台赛,有什么相同和不同之处呢?让我们以下面这个数组来举例说明:归并排序就像是组织一场元素之间...

weixin_39976575的博客 72

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

漫画:什么是快速排序算法?

这篇文章,以对话的方式,详细着讲解了快速排序以及排序排序的一些优化。一禅:归并排序是一种基于分治思想的排序,处理的时候可以采取递归的方式来处理。我弄个例子吧,好理解点。例如对于这个数组arr[] = { 4,1,3,2,7,5,8,0}。我们把它切割成两部分。把左半部分和右半部分分别排序好。之后再用一个,把这两个有序的子数组汇总成一个有序的大数组排好之后在复制这时,就排序完毕了一禅:左半部分和右半部分的排序相当于一个原问题的一个的,也是采取同样的方式,把左半部分分成两部分,然后…

帅地 3675

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

《漫画算法2》2021全新进阶版来袭!

那一年,它一上市便夺得2019京东科技新书销量榜TOP 1!那一年,它在经历了2w+读者参评后收获近99%的好评!那一年,它登上双十一期间的公交站广告牌大放异彩!那一年,它以豆...

程序猿DD 1877

漫画:什么是外部排序?

排序的时候我们可以选择快速排序或归并排序等算法。为了方便,我们把排序好的2G有序数据称之为吧。接着我们可以把两个小的有序子串合并成一个大的有序子串。注意:读取的时候是每次读取一个int数,通过比较之后在输出。按照这个方法来回合并,总共经过三次合并之后就可以得到8G的有序子串。接下来把12个数据分成4份,然后排序成有序子串然后把子串进行两两合并输出哪个元素,就在那个元素所在的有序子串再次读入一个元素继续重复直到合并成一个包含6个int的有序子串。

帅地 485

程序员小灰漫画算法汇总19

算法 漫画:寻找无序数组的第k大元素(修订版) 漫画:如何将一个链表“逆序”? 漫画:什么是加密算法? 漫画:什么是 “图”?(修订版) 漫画:深度优先遍历 和 广度优先遍历 漫画:图的 “最短路径” 问题 漫画:Dijkstra 算法的优化 漫画:图的 “多源” 最短路径 漫画:有趣的 “切蛋糕“ 问题 漫画:什么是二分查找?(修订版) 漫画:“旋转数组”中的二分查找 漫...

大白菜啊 964

算法:归并排序理论

图说归并排序 漫画:什么是归并排序? 归并排序 多路归并排序

OceanStar的博客 884

端午福利 | 《漫画算法2》2021全新进阶版来袭!(5本)

????关注“博文视点Broadview”,获取更多书讯那一年,它一上市便夺得2019京东科技新书销量榜TOP 1!那一年,它在经历了2w+读者参评后收获近99%的好评!那一年,它...

Ms08067安全实验室 980
上一篇: 漫画:什么是基数排序?
下一篇: 漫画:什么是快速排序?
废言Pro
博客等级 码龄16年 1093粉丝 142原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值