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

    浏览量

    19533
  • 排序算法
    +关注

    关注

    0

    文章

    52

    浏览量

    10046
  • 数组
    +关注

    关注

    1

    文章

    412

    浏览量

    25873

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

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

收藏 人收藏

    评论

    相关推荐

    时间复杂度为 O(n^2) 的排序算法

    , O(n2) 的排序算法可能会比 O(nlogn) 的排序算法执行效率高。不过随着数据规模增大, O(nlogn) 的排序
    的头像 发表于 10-19 16:31 885次阅读
    时间复杂度为 O(n^2) 的<b class='flag-5'>排序</b><b class='flag-5'>算法</b>

    TPS54120排序和跟踪

    电子发烧友网站提供《TPS54120排序和跟踪.pdf》资料免费下载
    发表于 10-10 10:54 0次下载
    TPS54120<b class='flag-5'>排序</b>和跟踪

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

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

    具有先进排序和输出裕度的中输入同步降压控制器TPS40101数据表

    电子发烧友网站提供《具有先进排序和输出裕度的中输入同步降压控制器TPS40101数据表.pdf》资料免费下载
    发表于 04-22 10:26 0次下载
    具有先进<b class='flag-5'>排序</b>和输出裕度的中输入同步降压控制器TPS40101数据表

    具有先进排序和输出裕度的中输入同步降压控制器TPS40100数据表

    电子发烧友网站提供《具有先进排序和输出裕度的中输入同步降压控制器TPS40100数据表.pdf》资料免费下载
    发表于 04-17 10:59 0次下载
    具有先进<b class='flag-5'>排序</b>和输出裕度的中输入同步降压控制器TPS40100数据表

    支持 ACPI 的 10 轨电源排序器和监视器UCD9090A数据表

    电子发烧友网站提供《支持 ACPI 的 10 轨电源排序器和监视器UCD9090A数据表.pdf》资料免费下载
    发表于 03-29 09:12 0次下载
    支持 ACPI 的 10 轨电源<b class='flag-5'>排序</b>器和监视器UCD9090A数据表

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

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

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

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

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

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

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

    冒泡排序(英语:Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,次比
    的头像 发表于 02-25 12:27 402次阅读
    C语言实现经典<b class='flag-5'>排序</b><b class='flag-5'>算法</b>概览

    十大排序算法总结

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

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

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

    数据结构:单链表的排序

    给定个单链表的头结点head(该结点有值),长度为n的无序单链表,对其按升序排序后,返回新链表。如当输入链表 {3,1,4,5,2} 时,经升序排列后,原链表变为 {1,2,3,4,5},对应的输出为 {1,2,3,4,5}。
    的头像 发表于 11-30 13:56 1414次阅读
    数据结构:单链表的<b class='flag-5'>排序</b>

    使用LTC2937排序和监督的分步指南

    电子发烧友网站提供《使用LTC2937排序和监督的分步指南.pdf》资料免费下载
    发表于 11-24 14:39 0次下载
    使用LTC2937<b class='flag-5'>排序</b>和监督的分步指南

    python升序和降序排序代码

    Python是一种简洁而强大的编程语言,提供了许多实用的函数和方法来排序数据。在本文中,我们将详细讨论Python中的升序和降序排序。我们将深入探讨不同的排序
    的头像 发表于 11-21 15:20 2968次阅读