0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何去实现并验证一种归并排序?

Android编程精选 来源:编程学习总站 作者:写代码的牛顿 2021-06-23 14:29 次阅读

1、归并排序原理

归并排序的核心思想是:利用分治策略,不断划分子序列直到不能划分为止,此时各个子序列是有序的,合并相邻有序子序列最终得到一个有序序列。我们利用下图解释划分子序列过程。

pYYBAGDS1Z2AIca3AAC9vaeaQVo244.jpg

现在有原始序列[5, 10, 6, 8, 15, 11, 10, 7]采用递归的方式不断对序列进行划分,最终划分成单个元素的序列。 有序子序列合并过程如下图所示:

pYYBAGDS1aiAZ8XiAAC-h-sJ9SI729.jpg

相邻有序子序列进行合并,得到一个有序的序列。最终所有有序子序列进行合并得到一个完整的有序序列。

2、归并排序实现

根据子序列合并过程图我们可以看出,本质上就是两个有序子序列进行合并成一个有序序列的过程。划分的过程还是在原始序列里进行划分,所以相邻的序列必定有边界进行划分,现假设两个相邻子序列边界分别是left、mid和right。其中left~mid构成一个子序列,mid+1~right构成另外一个子序列,两个序列相邻。合并代码如下:

poYBAGDS1cmANTI2AAEyFIiJlFo669.jpg

每次将较小的值放在临时缓冲区中,其中一个子序列遍历完毕则退出循环,判断两个子序列是否都已遍历完毕,将未遍历完毕的子序列拷贝到临时缓冲区中,最后将临时缓冲区里的内容再复制到两个子序列的所在区间,这样两个子序列合并完毕且有序,为了便于观察合并过程,每进行一次归并则打印归并后的序列值。

归并排序实现代码如下:

poYBAGDS1d6ASkdaAAB41za6Ycw167.jpg

3、归并排序算法验证

下面我们写一个小程序验证算法的正确性。

poYBAGDS1giAFRDqAAC2bDqUKrw960.jpg

为了便于观察,原始数据和图解的一样,现编译运行输出如下:

pYYBAGDS1hmAfW8cAABW_2v8nO0145.jpg

从输出结果中,我们对照图解归并排序过程,完全符合。

责任编辑:lq6

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 代码
    +关注

    关注

    30

    文章

    4748

    浏览量

    68356
  • 序列
    +关注

    关注

    0

    文章

    70

    浏览量

    19547

原文标题:图解归并排序

文章出处:【微信号:AndroidPush,微信公众号:Android编程精选】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    快速部署原型验证:从子卡到调试的全方位优化

    引言原型验证一种在FPGA平台上验证芯片设计的过程,通过在FPGA上实现芯片的设计原型,使得开发人员可以在硬件完成之前提前开始软件开发和系统验证
    的头像 发表于 09-30 08:04 560次阅读
    快速部署原型<b class='flag-5'>验证</b>:从子卡到调试的全方位优化

    一种供电总线技术POWERBUS二总线

    首先给大家介绍一种总线技术Powerbus总线,特性: 1.总线可供电,通讯和供电无需电气隔离 2.总线抗干扰能力强,可与市电走 3.可支持总线电流20A(2400bps) 4.具备总线短路保护
    发表于 07-23 13:38

    rup是一种什么模型

    RUP(Rational Unified Process,统建模语言)是一种软件开发过程模型,它是一种迭代和增量的软件开发方法。RUP是由Rational Software公司(现为IBM的
    的头像 发表于 07-09 10:13 1153次阅读

    plc是一种什么的电子装置

    PLC(Programmable Logic Controller,可编程逻辑控制器)是一种广泛应用于工业自动化领域的电子装置。它具有高度的灵活性和可靠性,能够实现各种复杂的控制任务。本文将详细介绍
    的头像 发表于 06-13 09:29 840次阅读

    手把手教你排序算法怎么写

    今天以直接插入排序算法,给大家分享一下排序算法的实现思路,主要包含以下部分内容:插入排序介绍插入排序算法
    的头像 发表于 06-04 08:03 644次阅读
    手把手教你<b class='flag-5'>排序</b>算法怎么写

    光伏逆变器可以并排设置吗?为什么?

    光伏逆变器的并排设置,也称为逆变器的并联运行,是指两个或多个逆变器连接到同个直流源或交流电网中,共同承担电能的转换和供应任务。
    的头像 发表于 04-18 17:19 2253次阅读

    北京清微智能科技有限公司发布IC验证新方法,实现双DUT验证

    清微智能在本周宣布新型专利“一种IC验证实现双DUT验证的方法”已于今年3月获批。该项专利内容由该集团独立研究,申请日期优先于2024年3月26日。
    的头像 发表于 04-08 10:07 518次阅读
    北京清微智能科技有限公司发布IC<b class='flag-5'>验证</b>新方法,<b class='flag-5'>实现</b>双DUT<b class='flag-5'>验证</b>

    用FPGA实现双调排序的方法(2)

    典型的排序算法包括冒泡排序、选择排序、插入排序归并排序、快速排序、希尔
    的头像 发表于 03-21 10:28 604次阅读
    用FPGA<b class='flag-5'>实现</b>双调<b class='flag-5'>排序</b>的方法(2)

    FPGA实现双调排序算法的探索与实践

    双调排序(BitonicSort)是数据独立(Data-independent)的排序算法,即比较顺序与数据无关,特别适合并行执行。在了解双调排序算法之前,我们先来看看什么是双调序列。
    发表于 03-14 09:50 558次阅读
    FPGA<b class='flag-5'>实现</b>双调<b class='flag-5'>排序</b>算法的探索与实践

    想听听48和大对数光缆的排序

    48芯光缆和大对数光缆都是光缆中的一种,它们的区别在于芯数不同。48芯光缆指的是光缆中包含48根光纤,而大对数光缆则是指光缆中芯数超过了48芯。 在实际的光缆应用中,不同芯数的光缆需要进行不同的排序
    的头像 发表于 03-12 10:44 555次阅读

    C语言实现经典排序算法概览

    冒泡排序(英语:Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,次比较两个元素,如果他们的顺序(如从大到小、首字
    的头像 发表于 02-25 12:27 423次阅读
    C语言<b class='flag-5'>实现</b>经典<b class='flag-5'>排序</b>算法概览

    基于断言的验证简介 – 第 1 部分

    基于断言的验证(ABV)是一种与传统方法相比可以大大减少验证过程的技术.
    的头像 发表于 01-09 09:59 549次阅读
    基于断言的<b class='flag-5'>验证</b>简介 – 第 1 部分

    十大排序算法总结

    排序算法是最经典的算法知识。因为其实现代码短,应该广,在面试中经常会问到排序算法及其相关的问题。般在面试中最常考的是快速排序
    的头像 发表于 12-20 10:39 1082次阅读

    一种产生激光脉冲新方法

    中提取粒子研究物质的性质。为了实现目标,三个小组共同制作了一种非常特殊的镜子——这种镜子不仅能反射光脉冲,还能及时将光脉冲压缩两百倍以上,并有可能进
    的头像 发表于 12-07 06:32 468次阅读
    <b class='flag-5'>一种</b>产生激光脉冲新方法

    时间复杂度为O (nlogn)的排序算法简述

    归并排序遵循分治的思想:将原问题分解为几个规模较小但类似于原问题的子问题,递归地求解这些子问题,然后合并这些子问题的解来建立原问题的解。
    的头像 发表于 12-05 09:57 558次阅读
    时间复杂度为O (nlogn)的<b class='flag-5'>排序</b>算法简述