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

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

3天内不再提示

插入排序和冒泡排序哪个更牛逼?

算法与数据结构 来源:算法与数据结构 2019-11-27 16:13 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

写在前边

排序对于每个开发者来讲,都多多少少知道几个经典的排序算法,比如我们之前以动画形式分享的冒泡排序,也包括今天要分享的插入排序。还有一些其他经典的排序,小鹿整理的共有十种是面试常问到的,冒泡排序、插入排序、希尔排序、选择排序、归并排序、快速排序、堆排序、桶排序、计数排序、基数排序。

虽然我们基本知道了这些排序算法,但是在实际项目开发以及面试中往往出乎我们所料。在面试中,经常会被问到各种排序之间的比较;在实际项目中,往往排序的数据不是我们所练习的整数。

那么今天我们来学习一下,插入排序比我们之前讲的冒泡排序有什么区别呢?面试官问我们,我们如何回答完整呢?

思维导图

1

如何分析一个排序算法?

之前写的一篇很详细的文章。

佩奇学编程 | 复杂度分析原来这么简单

分析排序算法已经成为我们衡量一个算法优良的重要标准,从以下三个方面入手。

1.1 时间效率

这里所谓的实践效率就是时间复杂度,相信大家对于时间复杂度并不陌生。

复杂度描述的是算法执行时间(或占用空间)与数据规模的增长关系。

对于时间复杂度的分析,要把最好时间复杂度、最坏时间复杂度、平均时间复杂度分析出来,分别对应了排序算法的最好排序情况、最坏排序情况以及平均排序效率。

1.2 空间消耗

所谓的空间消耗对应的是空间复杂度,在排序算法中需要开辟的额外内存空间是多少。如果空间复杂度为 O(1),此时该排序叫做原地排序。

注意:是额外的内存空间,存储排序数据消耗的空间不计。

1.3 稳定性

算法的稳定性虽然我们之前接触的很少,但是稳定性也是衡量一个排序算法的重要标准。什么是稳定排序呢?比如有一组有重复待排序的数据,排序前后,重复的数据顺序不变,此时该排序为稳定排序。否则,叫做不稳定排序。它在实际应用中非常重要的,今天我们就不多说,以后会慢慢分享到。

2

什么是插入排序?

顾名思义,插入排序就是通过插入的方式来排序呗,最经典的就是打斗地主,可以将打乱的扑克牌作为未排序区间,手中已经排好序的作为排序区间。每次我们摸牌的过程,就是从未排序区间,通过插入的方式,插入到已排序区间。那么这个过程就称为插入排序。

3

如何实现插入排序?

上述插入排序的概念我们已经理解了,那么给你一组数据,如何来进行插入排序呢?

首先我们要将数据划分为两个区间,已排序区间和未排序区间。

我们从未排序区间取出数据和已排序区间的数据进行比较,如果小于已排序区间的数据,那我们就交换数据。

如果交换到已排序区间数据不在大于插入的数据,然后将元素插入进去。

最后我们看一下总的插入排序动画和代码实现。

4

插入排序的性能

我们通过上边的对插入排序的拆分讲解和动画以及代码实现,想必面试官让你手写一个插入排序可以轻轻松松写出。但是我们掌握的插入排序知识还往往不够,我们在实际项目中,还要考虑插入排序的性能怎么样?因为才能更好的选择适当排序应用到项目中去。

4.1 插入排序的稳定性

再插入排序中,如果存在重复数据的话,前边的元素再插入的过程永远在第二个重复数据的前边,所以插入排序后的重复数据前后顺序不变,所以插入排序是稳定排序算法。

4.2 插入排序的空间消耗

我们可以发现,插入排序的移动方式,需要消耗常量级的额外内存空间存储,也就是代码中的 temp,所以时间复杂度为 O(1),我们上边讲到,空间复杂度为O(1)的是原地排序算法。

4.3 插入排序的时间效率

插入排序的最好情况就是不需要搬移任何数据,从头到尾寻找插入数据,每次只比较一次即可,即一组有序数据,所以最好时间复杂度为O(n)。

如果一组数据正好是倒序输出,那么每次都需要比较移动所有数据,每次移动时 n,n 个数据时间复杂度为O(n²)。

对于插入排序的平均时间复杂度,每次插入都要移动数据,插入 n 次,所以平均时间复杂度为 O(n²)。

5

小结

我们学完了今天的插入排序之后,我们回到最初的面试官问题上。插入排序和冒泡排序哪个更好呢?

我们现在元素移动次数上进行分析,如果一组无序的数据通过冒泡排序排好序之后,它的交换次数是这种数据的逆序度;对于插入排序来说也是一样的,移动次数上都是原本数据的逆序度。

元素的移动次数是相同的,那我们接下来看看元素的交换次数。从代码上分析可以明显看出,冒泡排序的一次交换需要三行代码,而插入排序的交换却需要一行,所以总的交换次数冒泡排序大于插入排序。

有小伙伴会问,这两行的差别有那么大吗?移动一次,我们可以不计较,如果数据很多,想想下,两者的效率差别很轻易的就比较出来了。

虽然冒泡排序的时间复杂度和插入排序的时间复杂度是相同的,但是我们实际使用中还是优先选择插入排序。

对于插入排序还是可以优化的,对了,没错,就是希尔排序,我们在这不多分开写,后期会继续更新。

如果觉得写的有帮助,欢迎转发朋友圈圈哦!

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

    关注

    23

    文章

    4761

    浏览量

    97146
  • 排序
    +关注

    关注

    0

    文章

    32

    浏览量

    9946

原文标题:动画:面试官问我插入排序和冒泡排序哪个更牛逼?

文章出处:【微信号:TheAlgorithm,微信公众号:算法与数据结构】欢迎添加关注!文章转载请注明出处。

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    C语言的常见算法

    ; } } ``` ### 插入排序 (Insertion Sort) ```c void insertionSort(int arr[], int n) { for (int i = 1; i < n
    发表于 11-24 08:29

    红外探测器“欢乐大比拼”:非制冷vs制冷,看看谁”!

    在科技飞速发展的今天,红外探测器就像隐藏在暗处的“超级眼睛”,在安消防、工业检测、户外观测等众多领域发挥着不可或缺的作用。而在红外探测器的大家族中,非制冷和制冷型这两大“明星选手”常常被人们拿来比较,今天就让我们来一场欢乐大比拼,看看它们谁”!
    的头像 发表于 10-16 10:21 533次阅读
    红外探测器“欢乐大比拼”:非制冷vs制冷,看看谁<b class='flag-5'>更</b>“<b class='flag-5'>牛</b>”!

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

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

    Microchip EV28J28A超声波电源评估板技术解析与应用指南

    Microchip Technology EV28J28A 超声波电源评估板具有超声波脉冲发生器和多路复用器演示所需的所有电压轨。该评估板提供电源排序和故障保护。EV28J28A评估板还支持外部同步。该板可自动处理脉冲发生器演示板所需的上电和掉电排序
    的头像 发表于 10-06 16:07 1026次阅读
    Microchip EV28J28A超声波电源评估板技术解析与应用指南

    使用env工具 生成的mdk工程 中的 头文件路径太乱了怎么解决?

    能不能按照相似路径归类排序
    发表于 09-16 07:46

    Texas Instruments TPS743低压差 (LDO) 线性稳压器数据手册

    和内核引脚之间ESD结构的应力。借助电源良好输出和使能输入,可使用外部稳压器轻松实现排序。借助这种灵活性,用户可以配置解决方案,满足DSP、FPGA和其他具有特殊启动要求的应用的排序要求。
    的头像 发表于 07-04 15:41 823次阅读
    Texas Instruments TPS743低压差 (LDO) 线性稳压器数据手册

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

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

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

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

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

    绝大多数负载点DC-DC转换器可以将上一个转换器的电源就绪输出连接至下一个转换器的使能输入,实现上电排序。这种方法只适合比较简单的设计,不能满足多数现代微处理器和DSP的要求一这类器件要求断电顺序必须与上电顺序相反。许多厂商针对这类应用推出了可编程排序IC,但器件价格较为
    的头像 发表于 05-21 09:55 964次阅读
    低成本电源<b class='flag-5'>排序</b>器解决方案

    如何区分usb-typec是插入电脑还是插入其他电源?

    使用的是01的板子,要做成在usb插入电脑时,使用uvc相机, usb插入电源时使用显示屏播放 如何判断设备是插入到电脑还是电源,是通过某个设备节点还是什么? 需要先运行
    发表于 04-24 08:23

    UCD9224 2 MHz、2 轨、4 相数字 PWM 降压控制器,具有改进的排序功能技术资料

    和管理。 UCD9224 旨在为非隔离式 DC/DC 转换器应用提供各种理想的功能,同时通过减少外部电路来最大限度地减少系统组件总数。该解决方案将多回路管理与排序、裕度、跟踪和智能相位管理集成在一起,以优化整体系统效率。此外,还支持环路补偿和校准,无需添加外部元件。
    的头像 发表于 03-28 15:44 564次阅读
    UCD9224 2 MHz、2 轨、4 相数字 PWM 降压控制器,具有改进的<b class='flag-5'>排序</b>功能技术资料

    CS1237数据跳动帮忙看看是什么原因造成的?

    公司项目, 用CS1237 称重 有两个问题: 第一情况:输出速度只能选择00和01 大于01.写入和读取就一致 所以项目现在用的是0x1C 第二:有传感器插入,但是是没有物品的时候 连续读10次
    发表于 02-17 10:43

    插入式电磁流量计的应用范围要知道

    插入式电磁流量计的结构比较简单,没有可活动部件,测量数值比较准确,比其他安装形式的电磁流量计体积小便于安装。且插入式电磁流量计的应用范围一点不比管段式的少,接下来我们详细说说插入式电磁流量计
    的头像 发表于 02-07 15:35 889次阅读
    <b class='flag-5'>插入</b>式电磁流量计的应用范围要知道

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

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

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

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