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

    文章

    4553

    浏览量

    66664
  • 序列
    +关注

    关注

    0

    文章

    70

    浏览量

    19451

原文标题:图解归并排序

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

收藏 人收藏

    评论

    相关推荐

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

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

    十大排序算法总结

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

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

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

    排序算法有哪些

    1. 归并排序(递归版) 归并排序(MERGE-SORT)是利用归并的思想实现排序方法,该算法采用经典的分治策略,即分为两步:分与治。 分
    的头像 发表于 10-11 15:49 319次阅读
    <b class='flag-5'>排序</b>算法有哪些

    排序算法之选择排序

    选择排序: (Selection sort)是一种简单直观的排序算法,也是一种不稳定的排序方法。 选择
    的头像 发表于 09-25 16:30 835次阅读
    <b class='flag-5'>排序</b>算法之选择<b class='flag-5'>排序</b>

    一种脉冲信号载波频率同步环及FPGA实现

    率估计法(Kay法)比较具有代表性,它在高信噪比条件下可达到Cramer-Rao界(CRB),并且运算量不大,适于硬件实现。本文以Kay频率估计法为基础构建了一种适用于脉冲信号的载波频率同步环,通过计算机仿真和FPGA
    发表于 09-20 08:28

    用于实现电源排序的各种方法

    电子发烧友网站提供《用于实现电源排序的各种方法.pdf》资料免费下载
    发表于 09-14 11:02 0次下载
    用于<b class='flag-5'>实现</b>电源<b class='flag-5'>排序</b>的各种方法

    归并排序-视频(2)#数据结构

    函数数据结构
    未来加油dz
    发布于 :2023年09月06日 19:14:46

    归并排序(2)#数据结构

    数据函数二叉树
    未来加油dz
    发布于 :2023年09月05日 09:50:11

    归并排序(1)#数据结构

    数据函数二叉树
    未来加油dz
    发布于 :2023年09月05日 09:49:09

    归并排序(2)#数据结构

    数据结构
    未来加油dz
    发布于 :2023年07月18日 16:14:08

    归并排序(1)#数据结构

    数据结构
    未来加油dz
    发布于 :2023年07月18日 16:13:16

    FPGA排序-冒泡排序介绍

    排序算法是图像处理中经常使用一种算法,常见的排序算法有插入排序、希尔排序、选择排序、冒泡
    发表于 07-17 10:12 660次阅读
    FPGA<b class='flag-5'>排序</b>-冒泡<b class='flag-5'>排序</b>介绍

    Python实现的常见内部排序算法

    排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因
    发表于 07-06 12:35 256次阅读
    Python<b class='flag-5'>实现</b>的常见内部<b class='flag-5'>排序</b>算法

    排序算法之“归并算法”介绍

    在说这个题目之前先来说说一个排序算法 “归并算法” 归并算法采取思想是分治思想,分治思想简单说就是分而治之,将一个大问题分解为小问题,将小问题解答后合并为大问题的答案。乍一看跟递归思想很像,确实如此
    的头像 发表于 05-22 10:03 421次阅读
    <b class='flag-5'>排序</b>算法之“<b class='flag-5'>归并</b>算法”介绍