为什么插入排序比冒泡排序更受欢迎?

插入排序、归并排序、冒泡排序和快速排序性能比较 常见算法插入、归并、冒泡和快速排序,对于数据量较大排序,顾名思义,快速排序最佳啦。 很多人包括我,只知道快速排序很快,但是它有什么特殊之处,算法是怎么实现,以及真正程序在运行时消耗时间是多少,和其它算法比,差多少呢? 我用JAVA语言简单实现了上述几种算法,小弟经验尚浅,纯碎只是玩玩而已,在算法逻辑不是最佳,然后用5w个整型数组分别对各算法测试,运行结果如下: 冒泡排序消耗时间: 运行时间 阅读详情

文章首发地址

如何分析一个“排序算法”?

分析一个排序算法可以从以下几个方面入手:

  1. 执行效率:分析排序算法的最好情况、最坏情况和平均情况下的时间复杂度,以及对应的原始数据的特点。考虑时间复杂度的系数、常数和低阶对执行效率的影响。
  2. 内存消耗:通过空间复杂度来衡量算法的内存消耗,特别关注是否为原地排序算法(空间复杂度为O(1))。
  3. 比较次数和交换(或移动)次数:对于基于比较的排序算法,分析其中涉及的比较次数和交换(或移动)次数,这些操作会影响算法的执行效率。
  4. 稳定性:考察排序算法的稳定性,即在排序后,相等元素之间的原有顺序是否保持不变。稳定排序算法对于处理一组对象按照某个key进行排序的需求非常有用。

为什么插入排序比冒泡排序更受欢迎?

  1. 效率更高:插入排序的平均时间复杂度为 O(n^2),而冒泡排序的平均时间复杂度也是 O(n^2),但插入排序在实际应用中通常比冒泡排序更快,因为插入排序在每次比较后就可以确定元素的最终位置,而冒泡排序需要进行多次交换才能将元素放到正确位置。
  2. 空间复杂度更低:插入排序只需要一个额外的存储空间来存储当前要插入的元素,而冒泡排序需要一个额外的存储空间来进行元素交换。
  3. 对某些特定情况下的数据更高效:插入排序对于已经部分有序的数组或者近乎有序的数组,可以达到较高的效率,而冒泡排序对于这种情况需要进行大量的无效比较和交换操作。
  4. 实现简单:插入排序的实现比冒泡排序更简单直观,只需要进行简单的元素比较和位置调换即可。

总的来说,插入排序在效率、稳定性和适应性上都相对优于冒泡排序,因此更受欢迎。

排序(上)——为什么插入排序比冒泡排序更受欢迎? 本文是学习算法的笔记,《数据结构与算法之美》,极客时间的课程 排序对于每个程序员来说,可能都不会陌生。平常的项目中,也经常遇到排序。按时间复杂度,分成三类,分三节来说 这里,先抛出一个问题。插入排序和冒泡排序的时间复杂度都是O(n2),可实际开发中,为什么我们更倾向于使用插入排序算法呢? 评价一个排序算法, 从效率角度说,要考虑各种时间复杂度;数据量小时,时间复复杂度的系数、常数也要考虑;元素比较... 阅读详情

相关推荐

11 _ 排序(上):为什么插入排序比冒泡排序更受欢迎?

排序对于任何一个程序员来说,可能都不会陌生。你学的第一个算法,可能就是排序。大部分编程语言中,也都提供了排序函数。在平常的项目中,我们也经常会用到排序。排序非常重要,所以我会花多一点时间来详细讲一讲经典的排序算法。排序算法太多了,有很多可能你连名字都没听说过,比如猴子排序、睡眠排序、面条排序等。我只讲众多排序算法中的一小撮,也是最经典的、最常用的:冒泡排序、插入排序、选择排序、归并排序、快速排序、计数排序、基数排序、桶排序。我按照时间复杂度把它们分成了三类,分三节课来讲解。

cjh的博客 469

冒泡排序、选择排序、插入排序、奇偶排序等算法分析以及性能比较

1.将一个列表中具有同样属性的字段排序,按照顺序1,2,3.......标出,此例中的单号可能存在相同。 参数为一个列表: private List<DepartmentExpenseDTO> setSortByDocumentNumber(List<DepartmentExpenseDTO> DepartmentExpenseDTO) { ...

Dream_it_possible!的博客 1327

排序:为什么插入排序比冒泡排序更受欢迎?

在编程中,排序算法是非常重要的一部分。插入排序和冒泡排序都是比较简单的排序算法,但在实际应用中,插入排序往往比冒泡排序更受欢迎。这是为什么呢?让我们一起来深入探讨一下。

yonggeit的博客 3009

数据结构与算法:冒泡排序,插入排序,希尔排序,选择排序

冒泡排序的数据交换要比插入排序的数据移动要复杂,冒泡排序需要3个赋值操作,而插入排序只需要1个。因此,插入排序比冒泡排序在性能方面更优。

Jack, what else can you do besides holding your little darling? 335

ZYNQ开发(2)在Linux系统层上PL-PS通过AXI-DMA传输数据详细步骤及注意事项

参考的网络资料 https://github.com/bperez77/xilinx_axidma/tree/master https://gitlab.gnome.org/HosseinBeheshti/UlteraZed7EV/-/tree/master/petalinux/xilinx_axidma https://www.icode9.com/content-3-925319.html https://blog.youkuaiyun.com/weixin_38218267/article/details/1

aizaiyueye的专栏 3448

STM32新手必看:AHT20温湿度传感器实战指南(附完整I2C代码)

本文详细介绍了如何使用STM32驱动AHT20温湿度传感器,包括硬件连接、I2C通信协议解析、驱动代码优化及实战调试技巧。通过对比AHT20与DHT11、SHT30等传感器的性能,突出AHT20的高性价比优势,并提供完整的I2C代码示例,帮助新手快速上手嵌入式传感器开发。

weixin_29163857的博客 293

插入排序是基本排序算法中最好的一种,虽然插入排序也是需要O(N^2)时间,但它比冒泡排序快一倍,比选择排序还要快点。

package none001; //大多数情况下,插入排序是基本排序算法中最好的一种,虽然插入排序也是需要O(N^2)时间,但它比冒泡排序快一倍,比选择排序还要快点。 //插入排序本质:每步将一个待排序的元素,按照其排序吗的大小,插入到前面已经排好序的一组元素的适当位置上去,直到元素 //全部插入为止。 //对于有序或者基本有序的数据来说,插入排序要好得多。当数据有序时,while条件总是假,

梦想巅峰 1404

PCIe 互联的芯片-- P2P(Peer-to-Peer)

PCIe设备间支持P2P直连通信,但需满足硬件、固件和软件三方面条件。硬件需CPU/芯片组和PCIe交换器支持P2P,BIOS需开启相关设置,操作系统和驱动也要适配。消费级GPU通常禁用此功能,且PCIe P2P性能(128GB/s带宽)远低于NVLink(900GB/s)。常见限制包括ACS阻断、IOMMU隔离和带宽瓶颈。可通过nvidia-smi或NCCL测试验证P2P是否生效。该技术适合异构设备通信,但需注意配置调优。

MHD0815的博客 683

选择 插入 快速 冒泡排序算法的比较

//快速排序 void Sort::QuickSort(int a[],int p,int r) { if (p { int q=Partition(a,p,r); QuickSort(a,p,q-1); QuickSort(a,q+1,r); } } int Sort::Partition(int a[],int p,int r) { int x = a[r];

人的梦想是不会终结的 1177

SPICE仿真软件:HSPICE_(22).HSPICE仿真案例分析

通过上述案例分析,我们可以看到HSPICE仿真软件在不同电路类型和仿真场景中的应用。无论是简单的直流分析、交流分析还是复杂的暂态分析,HSPICE都能提供详细的仿真结果,帮助我们更好地理解和优化电路设计。希望这些案例能够为读者提供实用的参考和指导,进一步提升使用HSPICE进行电路仿真的能力。输入文件的编写:确保输入文件格式正确,使用注释来解释每一部分的内容。分析类型的选择:根据电路的特点选择合适的分析类型,如.DC.AC和.TRAN。输出结果的设置:使用.print命令来指定需要输出的节点电压和支路电流。

kkchenjj的博客 1309

数控系统(CNC)系列:Fanuc 31i-B_(5).基本操作与编程

Fanuc 31i-B 系统使用 G 代码和 M 代码进行编程。G 代码主要用于控制机床的运动,M 代码用于控制辅助功能,如冷却液开关、主轴启动等。G 代码:用于指定机床的运动方式。例如,G00 用于快速定位,G01 用于直线插补,G02 用于顺时针圆弧插补,G03 用于逆时针圆弧插补。M 代码:用于控制机床的辅助功能。例如,M03 用于启动主轴顺时针旋转,M05 用于停止主轴,M08 用于开启冷却液,M09 用于关闭冷却液。

2401_87715305的博客 1766

为什么插入排序比冒泡排序更受欢迎

排序对于任何一个程序员来说,可能都不会陌生。你学的第一个算法,可能就是排序。大部分编程语言中,也都提供了排序函数。在平常的项目中,我们也经常会用到排序。今天我们就花点时间,来比较一下插入排序和冒泡排序.插入排序和冒泡排序的时间复杂度相同,都是 O(n2),空间复杂度都是O(1),但是在实际的软件开发里,为什么我们更倾向于使用插入排序算法而不是冒泡排序算法呢?分析一个排序的优劣我们一般从三个方面来分...

xiaoyaGrace的博客 226

地表最强之Android微信语音/腾讯会议通话录音

地表最强之Android微信语音/腾讯会议通话录音

cczhengv 6108

为什么插入排序比冒泡排序更受欢迎-笔记

我们先来看看冒泡排序代码: // 冒泡排序,a 表示数组,n 表示数组大小 public void bubbleSort(int[] a, int n) { if(n&amp;lt;=1) return; for(int i=n-1;i&amp;gt;0;i--){ int flag=false; // 提前退出冒泡循环的标志位 for(int j=1;j&amp;lt;=i;j++){ if(a[j]&amp;...

jean博客 410

使用机器学习算法预测黄金价格

在本文中,我们将使用线性回归、XGBoost和LSTM这三种不同的机器学习算法来预测黄金价格。接下来,我们使用线性回归、XGBoost和LSTM分别建立了模型,并进行了训练和预测。这些机器学习算法可以帮助我们对黄金价格进行预测,但请注意,市场价格受多种因素影响,因此预测结果可能并不完全准确。接下来,我们需要对数据进行一些预处理,以便用于机器学习模型的训练和测试。我们将使用80%的数据作为训练集,20%的数据作为测试集。最后,我们将绘制每个模型的预测结果,并将其与实际价格进行比较,以评估模型的性能。

QromMatlab的博客 1316

手撕Lua字节码:从黑盒到透明

lua 字节码 怎么‘手撕’一个 chunk 看看里面啥样?我手里有一个.luac或出来的二进制字节码,想知道里面到底是什么结构、哪些字段、有哪些指令,怎么一步一步“拆箱”,从一个黑盒变成有迹可循的东西?也就是:不满足于只会loadpcall而是想亲眼看看一个 chunk 内部长啥样,甚至写点工具把它解析出来。这篇就用带你从“拿到一坨.luac不搞高深玄学,尽量让你看完就能自己动手。注:以 Lua 5.3/5.4 为主,细节各版本略有不同,但大体套路是一致的。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 100

【08】排序(上):为什么插入排序比冒泡排序更受欢迎?

08排序(上):为什么插入排序比冒泡排序更受欢迎?1. 排序方法与复杂度归类2. 如何分析一个“排序算法”?3. 冒泡排序3.1. 排序原理3.2. 代码实现(Python)3.3. 性能分析4. 有序度&无序度&满有序度5. 插入排序5.1. 插入排序原理5.2. 代码实现5.3. 性能分析6. 选择排序6.1. 选择排序原理6.2 代码实现6.3 选择排序性能分析7. 思考8....

Jock2018的博客 2258

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

11 | 排序(上):为什么插入排序比冒泡排序更受欢迎?

对于值相同的元素,我们可以选择将后面出现的元素,插入到前面出现元素的后面,这样就可以保持原有的前后顺序不变,所以插入排序是稳定的排序算法。是取未排序区间中的元素,在已排序区间中找到合适的插入位置将其插入,并保证已排序区间数据一直有序。冒泡的过程只涉及相邻数据的交换操作,只需要常量级的临时空间,不涉及额外的申请空间。为了保证冒泡排序算法的稳定性,当有相邻的两个元素大小相等的时候,我们不做交换。if (a[j] > a[j+1]) { // 交换。if (a[j] > a[j+1]) { // 交换。

Balance 1222

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

11.讲排序(上):为什么插入排序比冒泡排序更受欢迎

最经典的、最常用的:冒泡排序、插入排序、选择排序、归并排序、快速排序、计数排序、基数排序、桶排序。 思考题:插入排序和冒泡排序的时间复杂度相同,都是O(n2),在实际的软件开发里,为什么我们更倾向于使用插入排序算法而不是冒泡排序算法呢?从以下几方面考虑:原地排序(Sorted in place):就是特指空间复杂度是O(1)的排序算法。稳定排序算法:数据中相同的值经过排序后,相对位置不变。应用价值:订单有两个属性,⼀个是下单时间,另⼀个是订单⾦额。如果我们现在 有10万条订单数据,我们希望按照⾦额从⼩到⼤

tobebetter9527的博客 260

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

九大排序(上):为什么插入排序比冒泡排序更受欢迎?

本文介绍了三种时间复杂度为O(N²)的经典排序算法:冒泡排序、插入排序和选择排序。文章从五个维度(运行效率、原地性、稳定性、适应性和比较方式)评价算法优劣,并提供了测试程序框架。冒泡排序通过相邻元素比较交换实现排序,具有稳定性和适应性;选择排序每次选择未排序区间最小值进行交换,不具备稳定性和适应性;插入排序将元素插入有序区间,具有稳定性和适应性。三种算法虽然时间复杂度相同,但插入排序因更适应部分有序数据而在实际中更受欢迎。文中还包含各算法的实现代码、运行结果和优劣分析,为理解基础排序算法提供了全面参考。

hi0_6的博客 1009

排序(上):为什么插入排序比冒泡排序更受欢迎?

一、几种经典排序算法及其时间复杂度级别 二、如何分析一个排序算法? 1.学习排序算法的思路?明确原理、掌握实现以及分析性能。 2.如何分析排序算法性能?从执行效率、内存消耗以及稳定性3个方面分析排序算法的性能。 3.执行效率:从以下3个方面来衡量 1)最好情况、最坏情况、平均情况时间复杂度 2)时间复杂度的系数、常数、低阶:排序的数据量比较小时考虑 3)比较次数和交换(或移动)次数 4.内存消耗:通过空间复杂度来衡量。针对排序算法的空间复杂度,引入原地排序的概念,原地排序算法就是指空间复杂度为O(1)的排

com_QL的博客 318

同样的复杂度,为什么插入排序比冒泡排序更受欢迎?

前面了解了 冒泡排序 和 插入排序,时间复杂度、空间复杂度都相同: 最好情况时间复杂度:O(n) 最坏情况时间复杂度:O(n2) 平均情况下的时间复杂度:O(n2) 空间复杂度:O(1),稳定排序算法 但为什么实际开发中插入排序使用偏多呢? 原因如下: 针对同一个数组,冒泡排序和插入排序,最优情况下需要交互数据的次数是一样(即原数组的逆序度一样) 每次数据交换,冒泡排序的移动数...

ConstXiong 482
上一篇: 数据分片的艺术:Sharding Key为多节点数据库带来的巨大优势
下一篇: 轻松管理项目依赖:深入了解SBT的依赖管理功能
Walter Sun
博客等级 码龄9年 1726粉丝 288原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Walter Sun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值