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

    浏览量

    19451
  • 排序算法
    +关注

    关注

    0

    文章

    50

    浏览量

    10020
  • 数组
    +关注

    关注

    1

    文章

    409

    浏览量

    25595

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

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

收藏 人收藏

    评论

    相关推荐

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

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

    十大排序算法总结

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

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

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

    python升序和降序排序代码

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

    排序算法有哪些

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

    排序算法之选择排序

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

    FPGA排序-冒泡排序介绍

    排序算法是图像处理中经常使用一种算法,常见的排序算法有插入
    发表于 07-17 10:12 668次阅读
    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>

    常见排序算法分类

    本文将通过动态演示+代码的形式系统地总结十大经典排序算法排序算法 算法分类 —— 十种常见排序
    的头像 发表于 06-22 14:49 628次阅读
    常见<b class='flag-5'>排序</b><b class='flag-5'>算法</b>分类

    详解DeepMind排序算法

    DeepMind 的这一发现确实居功至伟,但不幸的是,他们未能解释清楚算法。下面,我们来详细看看他们发布的一段汇编代码,这是一个包含三个元素的数组的排序,我们将伪汇编转换为汇编:
    的头像 发表于 06-21 15:38 259次阅读

    利用强化学习来探索更优排序算法的AI系统

    前言 DeepMind 最近在 Nature 发表了一篇论文 AlphaDev[2, 3],一个利用强化学习来探索更优排序算法的AI系统。 AlphaDev 系统直接从 CPU 汇编指令的层面入手
    的头像 发表于 06-19 10:49 392次阅读
    利用强化学习来探索更优<b class='flag-5'>排序</b><b class='flag-5'>算法</b>的AI系统

    详细介绍8种最常用的排序算法

    在计算机科学领域中,排序算法一种基本的算法排序算法可以将一个数据集合重新排列成一个按照某种规
    的头像 发表于 06-06 14:52 2340次阅读

    C语言经典排序算法总结

    本文将通过动态演示+代码的形式系统地总结十大经典排序算法
    发表于 06-05 10:56 389次阅读
    C语言经典<b class='flag-5'>排序</b><b class='flag-5'>算法</b>总结

    ABB工业机器人排序算法

    冒泡排序的英文Bubble Sort,是一种最基础的交换排序。之所以叫做冒泡排序,因为每一个元素都可以像小气泡一样,根据自身大小一点一点向数组的一侧移动。 冒泡
    的头像 发表于 05-22 16:12 1831次阅读
    ABB工业机器人<b class='flag-5'>排序</b><b class='flag-5'>算法</b>

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

    在说这个题目之前先来说说一个排序算法归并算法归并算法采取思想是分治思想,分治思想简单说就
    的头像 发表于 05-22 10:03 429次阅读
    <b class='flag-5'>排序</b><b class='flag-5'>算法</b>之“<b class='flag-5'>归并</b><b class='flag-5'>算法</b>”介绍