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

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

3天内不再提示

排序算法里面的另外一种排序算法:归并排序!

Q4MP_gh_c472c21 来源:txp嵌入式 作者:txp嵌入式 2020-11-16 16:30 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

今天继续给大家分享排序算法里面的另外一种排序算法:归并排序!

一、归并排序:

1、归并排序操作的核心思想:

a、确定分界点:mid=(l+r)/2

b、递归排序左边和右边(排完左右两边的数,就会成为两个有序的序列了)

c、归并(把上面的两个有序序列合并成一个有序的序列,用一个简单的词来说,就是合二为一!)

2、举例:

比如上图我们有两组已经排好的序列数字,我们要进行第三步合并,该如何进行呢?思路如下:

a、这里先定义一个空的数组res,它主要是为了临时存放合并序列排序好的数字;我们从图中可以看到,第一个序列指针i指向数字1,第二序列指针j指向2,这个时候我们要比较两个数字的大小,小的数字就放到临时数组res里面去,这里我们明显知道数字1小于2,所以把1放到临时数组res里去

b、然后指针i往下移动,如下图所示,再次进行比较,明显发现指针j指向的数字2更小,把它放到res里面去,然后指针j往下移动,指针i不动,后面依次类推

c、如下图所示,两个指针都指向了数字5,如果遇到两个数字一样的话,一般是把第一个序列的数字放到临时数组res里面去,这点稍微要注意一下

d、最后把临时数组里面的是数字放到原来的数组里面去

注意:一个算法稳定,并不能说它的时间效率是稳定的;这里的稳定是说两个序列中有两个数是相同的,如果在排完序之后,他们的位置还是没有发生变化的话,那么这个排序就是稳定的,反之亦然!

3、归并排序的平均时间复杂度的计算推导:

注:图片来源:https://visualgo.net/zh/sorting

从图片的纵性来分析,当拆解到1的时候,这个时候什么数等于n除于它等于1,通过计算,我们知道是logn,然后再从横向分析,我们要最多比较n个数字,所以归并排序的时间复杂度就是:nlogn

二、代码示例:

代码:

#include usingnamespacestd; constintN=1e5+10; intn; intq[N],tmp[N]; voidmerge_sort(intq[],intl,intr) { if(l>=r)return;//判断序列中是否为空或者只有一个数字,如果是的话,我们就不用排序了 //确定分界点 intmid=l+r>>1; //递归处理 merge_sort(q,l,mid); merge_sort(q,mid+1,r); //定义双指针 intk=0,i=l,j=mid+1; //归并处理 while(i<= mid && j <= r)   if(q[i] < q[j])tmp[k++] = q[i++];  else   tmp[k++] = q[j++];  //把源数组中剩余的数字(注意这里的数字一定是最小的)放到临时数组后面去  while(i <= mid)tmp[k++] = q[i++];  while(j <= r)tmp[k++] = q[j++];  //把临时数组中排好序的数字放到源数组中去  for(i = l, j =0;i<=r;i++,j++)q[i]=tmp[j]; } int main() {  scanf("%d",&n);  for(int i = 0;i

结果:

责任编辑:lq

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

    关注

    0

    文章

    70

    浏览量

    20135
  • 排序算法
    +关注

    关注

    0

    文章

    53

    浏览量

    10378
  • 数组
    +关注

    关注

    1

    文章

    420

    浏览量

    27115

原文标题:2020-1024=996:归并排序!

文章出处:【微信号:gh_c472c2199c88,微信公众号:嵌入式微处理器】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    C语言的常见算法

    # C语言常见算法 C语言中常用的算法可以分为以下几大类: ## 1. 排序算法 ### 冒泡排序 (Bubble Sort) ```
    发表于 11-24 08:29

    8常用的CRC算法分享

    CRC 计算单元可按所选择的算法和参数配置来生成数据流的 CRC 码。有些应用中,可利用 CRC 技术来验证数据的传输和存储的完整性。 8 常用的 CRC 算法,包括: CRC16_IBM
    发表于 11-13 07:25

    SM4算法实现分享(算法原理

    SM4分组加密算法采用的是非线性迭代结构,以字为单位进行加密、解密运算,每次迭代称为轮变换,每轮变换包括S盒变换、非线性变换、线性变换、合成变换。加解密算法与密钥扩展都是采用32轮非线性迭代结构
    发表于 10-30 08:10

    复杂的软件算法硬件IP核的实现

    源代码编译为 HDL 的过程共分为两步: (1)C to HASM (2)HASM to HDL 第步 C to HASM 是将 C 语言描述的算法编译为一种中间的、与实际硬
    发表于 10-30 07:02

    SM4算法原理及分享1

    SM4算法一种分组密码算法。其分组长度为128bit,密钥长度也为128bit。加密算法与密钥扩展算法均采用32轮非线性迭代结构,以字(
    发表于 10-30 06:54

    加密算法的应用

    加密是一种保护信息安全的重要手段,近年来随着信息技术的发展,加密技术的应用越来越广泛。本文将介绍加密算法的发展、含义、分类及应用场景。 1. 加密算法的发展 加密算法的历史可以追
    发表于 10-24 08:03

    1688 拍立淘接口实战:从图像优化、工厂排序到供应链匹配(附可跑代码)

    深耕B2B电商十余年,亲历1688拍立淘接口20+坑:从图像预处理、权限申请到工厂排序。本文详解核心参数、实战代码及多图验证、定制方案生成等高级技巧,助你实现“看图找厂”精准匹配,附可运行代码,新手也能少走两年弯路。
    的头像 发表于 10-09 10:39 296次阅读

    分享个嵌入式学习阶段规划

    (如指针实现链表增删查改),排查内存泄漏、野指针数据结构与算法:掌握线性表 / 栈 / 树等结构,学查找 / 排序算法,手写代码(如二分查找、快速排序)电子电路基础:学电路原理、电子元
    发表于 09-12 15:11

    国际首创新突破!中国团队以存算排序架构攻克智能硬件加速难题

    2025 年 6 月 25 日,北京大学团队在智能计算硬件方面取得领先突破,国际上首次实现了基于存算体技术的高效排序硬件架构 (A fast and reconfigurable
    的头像 发表于 07-02 16:50 563次阅读
    国际首创新突破!中国团队以存算<b class='flag-5'>一</b>体<b class='flag-5'>排序</b>架构攻克智能硬件加速难题

    Analog Devices Inc. MAX16895 监控电路特性/应用/功能图

    Analog Devices MAX16895监控电路是小型、低功耗、电压监控电路,具有排序功能。这些器件具有可调的、低至0.5V的电压监控阈值,并可利用外部电容调节延迟时间。这些Analog Devices器件非常适合用于电源排序、复位
    的头像 发表于 06-26 09:34 561次阅读
    Analog Devices Inc. MAX16895 监控电路特性/应用/功能图

    双电机同步驱动系统控制参数整定研究

    摘 要:工业发展的要求使得双(多)电机的运用越来越广泛。双电机同轴驱动的控制系统是一种典型的多通道多控制器系统,为了获得优良的控制性能,有必要对其控制器参数的整定进行研究。采用单弹篑-双慣量块模型
    发表于 06-19 11:04

    低成本电源排序器解决方案

    绝大多数负载点DC-DC转换器可以将上个转换器的电源就绪输出连接至下个转换器的使能输入,实现上电排序。这种方法只适合比较简单的设计,不能满足多数现代微处理器和DSP的要求这类器件
    的头像 发表于 05-21 09:55 968次阅读
    低成本电源<b class='flag-5'>排序</b>器解决方案

    一种基于分数阶 PID 直流电机调速的 AGV 控制系统

    为设计一种低成本、抗干扰、稳定可靠的 AGV,提出一种基于磁带导航的 AGV 系统。采用 Megawin 公司的80C51单片机为控制核心,以并排对称设计的霍尔传感器实现循迹和纠偏,红外光
    发表于 03-25 15:10

    详解Linux sort命令之掌握排序技巧与实用案例

    在linux系统使用过程中,提供了sort排序命令,支持常用的排序功能。 常用参数 sort命令支持很多参数,常用参数如下:   短参数 长参数 说明 -n – number-sort 按字符串数值
    的头像 发表于 01-09 10:10 1598次阅读

    TimSort:个在标准函数库中广泛使用的排序算法

    排序算法呢? 本文将带你走进 TimSort,个在标准函数库中广泛使用的排序算法。 这个算法
    的头像 发表于 01-03 11:42 963次阅读