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

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

3天内不再提示

熟练掌握常用的排序算法

冬至配饺子 来源:嵌入式案例Show 作者:嵌Sir 2022-08-20 09:40 次阅读

1、前言

排序是数据处理中经常运用的一种重要运算,排序的功能是将一个数据元素(记录)的任意序列,重新排列成一个按照一个规则有序的序列。常用的排序算法我们要熟练掌握。

2、冒泡排序

冒泡排序(英语:Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。

示例:

poYBAGMAOruAL01VAAEBj1wgHog062.png

3、选择排序

选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

示例:

pYYBAGMAOtKAddFZAADE9s8DT38780.png

4、插入排序

插入排序(英语:Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序,因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。

示例:

poYBAGMAOuSAMzv8AAB-sAsyGzI328.png

5、希尔排序

希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。希尔排序是非稳定排序算法。

希尔排序是基于插入排序的以下两点性质而提出改进方法的:

插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率

但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位

希尔排序先将待排记录序列分割成为若干子序列分别进行插入排序,待整个序列中的记录"基本有序"时,再对全体记录进行一次直接插入排序。

示例:

pYYBAGMAOvaAY8bDAACfNRPrx-0060.png

6、归并排序

归并排序应用的是分治的思想,将大队列划分成小队列,然后小队列内排序,再将排好序的小队列组合成大队列,步骤:

1、将划分成两个队列直到不可再分为止

2、小队列内排序

3、左队列与右队列合并

4、返回合并的队列

示例:

poYBAGMAOxuAA4jjAAEh-jcUQj8079.png

7、快速排序

快速排序的基本思想是:通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,已达到整个序列有序。一趟快速排序的具体过程可描述为:从待排序列中任意选取一个记录(通常选取第一个记录)作为基准值,然后将记录中关键字比它小的记录都安置在它的位置之前,将记录中关键字比它大的记录都安置在它的位置之后。这样,以该基准值为分界线,将待排序列分成的两个子序列。

一趟快速排序的具体做法为:设置两个指针low和high分别指向待排序列的开始和结尾,记录下基准值baseval(待排序列的第一个记录),然后先从high所指的位置向前搜索直到找到一个小于baseval的记录并互相交换,接着从low所指向的位置向后搜索直到找到一个大于baseval的记录并互相交换,重复这两个步骤直到low=high为止

示例:

poYBAGMAO0CAHg1AAAEAiKJZq68115.pngpYYBAGMAO0aAErN_AABxdMH6wck722.png



审核编辑:刘清

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

    关注

    23

    文章

    4622

    浏览量

    93086
  • 指针
    +关注

    关注

    1

    文章

    480

    浏览量

    70584
  • 数据处理
    +关注

    关注

    0

    文章

    606

    浏览量

    28597
收藏 人收藏

    评论

    相关推荐

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

    在linux系统使用过程中,提供了sort排序命令,支持常用排序功能。 常用参数 sort命令支持很多参数,常用参数如下:   短参数 长
    的头像 发表于 01-09 10:10 133次阅读

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

    在计算机科学的领域,排序算法是每位学生必学的基础,而排序的需求是每位程序员在编程过程中都会遇到的。 在你轻松调用 .sort() 方法对数据进行排序时,是否曾好奇过,这个简单的方法背后
    的头像 发表于 01-03 11:42 94次阅读

    高薪 mcu 触控算法专家(触控按键,不要触控屏)

    触摸原理,具有触摸算法/硬件的成功设计开发和调测经验(至少熟练掌握电容触摸原理); 5、精通触摸相关安规认证的测试规范; 6、具有触摸算法大量产应用经验,面向家电应用触控算法经验优先;
    发表于 12-27 14:12

    【「从算法到电路—数字芯片算法的电路实现」阅读体验】+内容简介

    、AI芯片、多媒体处理芯片等)都是由四则运算器、滤波器、特殊信号发生器等基本算法电路构成的,熟练掌握这些基本算法电路是实现复杂算法电路的基础。忽视基本
    发表于 11-21 17:14

    【「从算法到电路—数字芯片算法的电路实现」阅读体验】+介绍基础硬件算法模块

    数问题。因此,深入理解芯片所基于的算法是国产自主研发的关键。任何算法都是由加减四则运算、滤波器、特殊信号发生器等基本数学方法构成的,熟练掌握这些方法是实现 算法的基础。如果说复杂
    发表于 11-21 17:05

    物联网学习路线来啦!

    环境 STM32主流开发方式 3.1.2单片机常见接口 熟练掌握GPIO、UART、SPI、I2C、ADC等接口,以及中断、定时器、DMA等单片机基本模块的使用,适度了解看门狗、低功耗控制。 3.1.3
    发表于 11-11 16:03

    基于FPGA实现数码管显示

    本文介绍数码管显示译码基本工作原理及Verilog HDL驱动代码编写,进一步熟练掌握FPGA入门基础知识。
    的头像 发表于 10-24 14:44 1056次阅读
    基于FPGA实现数码管显示

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

    作者:京东保险 王奕龙 对于小规模数据,我们可以选用时间复杂度为 O(n2) 的排序算法。因为时间复杂度并不代表实际代码的执行时间,它省去了低阶、系数和常数,仅代表的增长趋势,所以在小规模数据情况下
    的头像 发表于 10-19 16:31 1193次阅读
    时间复杂度为 O(n^2) 的<b class='flag-5'>排序</b><b class='flag-5'>算法</b>

    名单公布!【书籍评测活动NO.46】从算法到电路 | 数字芯片算法的电路实现

    的,熟练掌握这些基本算法电路是实现复杂算法电路的基础。忽视基本算法及其电路设计而谈论复杂算法电路,无异于痴人说梦。 本书力求从
    发表于 10-09 13:43

    常用的ADC滤波算法有哪些

    ADC(模数转换器)滤波算法在信号处理中起着至关重要的作用,它们能够帮助我们提取出有用的信号,同时滤除噪声和干扰。以下是常用的ADC滤波算法详解,这些算法各具特色,适用于不同的应用场景
    的头像 发表于 10-08 14:35 439次阅读

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

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

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

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

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

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

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

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

    聊一聊嵌入式C语言

    作为一名嵌入式软件开发者,熟练掌握嵌入式C语言对我的日常工作至关重要。
    的头像 发表于 01-22 09:28 561次阅读