经典算法(三)---插入排序

【21天学习挑战】经典算法之【插入排序】 插入排序是一种简单直观的排序算法,插入排序不适合对于数据量比较大的排序应用。但是,如果需要排序的数据量很小,那么插入排序还是一个不错的选择。尤其当数据基本有序时,采用插入排序可以明显减少数据交换和数据移动次数,进而提升排序效率。... 阅读详情

一、插入排序

1. 插入排序的定义

插入排序(Insertion sort),一般也被称为直接插入排序。

对于少量元素的排序,它是一个有效的算法 。

插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增1的有序表。在其实现过程使用双层循环,外层循环对除了第一个元素之外的所有元素,内层循环对当前元素前面有序表进行待插入位置查找,并进行移动。

基本思想:

插入排序的工作方式像许多人排序一手扑克牌。

开始时,我们的左手为空并且桌子上的牌面向下。然后,我们每次从桌子上拿走一张牌并将它插入左手中正确的位置。为了找到一张牌的正确位置,我们从右到左将它与已在手中的每张牌进行比较。拿在左手上的牌总是排序好的,原来这些牌是桌子上牌堆中顶部的牌 。


插入排序是指在待排序的元素中,假设前面n-1(其中n>=2)个数已经是排好顺序的,现将第n个数插到前面已经排好的序列中,然后找到合适自己的位置,使得插入第n个数的这个序列也是排好顺序的。按照此法对所有元素进行插入,直到整个序列排为有序的过程,称为插入排序 。

2. 算法分析

3. 算法思想:

通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

每步将一个待排序的元素,按其排序码大小插入到前面已经排好序的一组元素的适当位置上去,直到元素全部插入为止。

动态图如下:

参考代码:

#include<iostream>
using namespace std;
int main()
{
    int a[]={98,76,109,34,67,190,80,12,14,89,1};
    int k=sizeof(a)/sizeof(a[0]);
    int i,j;
    for(i=1;i<k;i++)//循环从第2个元素开始
    {
        if(a[i]<a[i-1])
        {
            int temp=a[i];
            for(j=i-1;j>=0 && a[j]>temp;j--)
            {
                a[j+1]=a[j];
            }
            a[j+1]=temp;//此处就是a[j+1]=temp;
        }
    }
    for(int f=0;f<k;f++)
    {
        cout<<a[f]<<"  ";
    }
    return 0;
}

一文学懂经典算法系列之:折半插入排序(附讲解视频) 本文关键字:经典算法、排序算法、插入排序、折半插入排序、算法实践。由于在插入排序的过程中,已经生成了一个(排好的元素组成的)有序数列。所以在插入待排元素时可以使用折半查找的方式更快速的确定新元素的位置,当元素个数较多时,折半插入排序优于直接插入排序。......... 阅读详情

相关推荐

斑马打印机状态监控进阶:不用SDK也能获取打印状态的3种野路子

本文介绍了三种不依赖官方SDK的斑马打印机状态监控方法,包括SGD命令、TCP端口嗅探和共享打印机日志分析。这些方案适用于老旧系统或网络受限环境,帮助运维人员实时掌握打印状态,提升设备管理效率。特别适合工业自动化和物流仓储场景中的应急处理。

weixin_42628688的博客 426

插入排序实现过程

1,插入排序法介绍 插入式排序属于内部排序法,是对于欲排序的元素以插入的方式找寻该元素的适当位置,以达到排序的目的。 2,插入排序法思想 插入排序(Insertion Sorting)的基本思想是:把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。 3,插入排序思路图 4,逐步演变过程 /** *

hanlin_zhao的博客 554

PPT高清导出秘籍:如何轻松设置600dpi图片分辨率

本文详细解析了PPT导出图片模糊的根本原因,并提供了通过修改Windows注册表将导出分辨率从默认的96dpi提升至600dpi的完整教程。该方法能显著提升图片清晰度,满足学术出版与高质量印刷需求,文中还包含效果对比、进阶设置及常见问题解答。

a0b1c2d3的专栏 1312

经典算法(三):插入排序

小葵花课堂开课啦!孩子算法老不好,多半是没浏览我滴博客,只要多浏览我滴博客就会好!!最近,某某人要换工作,我说最近在学习算法,然后就惹到某某人了,不更新算法博客,那家伙大男子主义,哎呀妈呀,受不了,希望大家可怜可怜我这被逼写博客的心情,多多访问,多多交流!!(不好,眼泪流到键盘上了),不废话了,言归正传!一、算法描述插入即表示将一个新的数据插入到一个有序数组中,并继续保持有序。例如有一个长度为N的无

SnowWitch的博客 1454

App inventor2通过蓝牙控制Arduino Uno LED开关

App inventer2控制Arduino Uno LED开关 如果学会这个小程序,大部分的手机通过蓝牙控制Arduino的功能都可以实现,这个小示例是通过蓝牙模块向Arduino发送"0"和"1",而其它功能要发送其它不同的字符串内容给Arduino. 所需硬件: Arduino Uno JDY-16 蓝牙模块(我的是蓝牙4.2版本) 草帽LED(可选) 手机(我用的是安卓,苹果手机应该也可以,最近其应用商店也有App inventor(AI)伴侣) 软件: Aduino IDE或者Platfom

Firmin123456的博客 5495

从JTAG到AS模式:一文搞懂EP4CE10E22C8N所有配置引脚(MSEL, nCONFIG, DATA0)的用法

本文深入解析EP4CE10E22C8N FPGA的配置引脚(MSEL, nCONFIG, DATA0)在不同模式下的使用方法,特别关注从JTAG到AS模式的切换要点。通过详细的配置模式对比、状态机分析和PCB布局建议,帮助开发者避免常见陷阱,提升FPGA配置成功率。

weixin_33713350的博客 319

经典算法(三)----插入排序----图解法让你快速入门

引言 只要设计到数据,就会涉及到数据的排序问题,比如给你随机给你五个整数3,1,5,2,4 。让你从小到大进行排序,那我们该怎样才是实现对这些整数的排序呢 ? 答案是多种多样的,比如用插入排序、选择排序、堆排序、归并排序、快速排序等等,这些排序方法都可以实现对整数排序,而这篇文章要讲的就是插入排序 本文将从以下几个问题对冒泡排序进行分析和讲解: 什么是插入排序? 插入排序的大概过程是什么? 怎样用代码实现插入排序? 选择排序的代码详解。 什么是插入排序? 下面...

好好学习。天天编程 1022

爬虫不宕机!2026自愈式爬虫开发(Python+AI自动应对页面改版)

传统爬虫最大的痛点是"页面一改就宕机":前端布局调整、CSS选择器失效、数据结构变化,都会导致爬虫瘫痪,需要人工逐行修改代码。2026年,基于AI的自愈式爬虫成为行业标配:通过大模型自动识别页面结构变化、适配新的元素定位规则、修复数据提取逻辑,实现"页面改版不宕机,AI自动自愈"的企业级效果。本文从零讲解如何用Python+AI构建自愈式爬虫,聚焦页面改版自适应、故障自动修复、规则动态更新三大核心能力,附带可直接落地的生产级代码。问题场景解决方案LLM生成规则格式错误。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1215

【限时】21天学习挑战赛 - 经典算法

参与活动的小伙伴需要在活动详情页参与活动视为成功,参与形式为:根据专栏的学习内容或专栏博主引导发布自己的学习计划、学习笔记、总结、实践案例等内容(以博客形式发布)。

微光点亮星辰 3362

FineBI学习总结

交叉表:一组作为行标题显示在表的左部,另一组作为列标题显示在表的顶部。连接到数据,如果数据不满足数据分析的需求,先进行自助数据集处理。数据集分类:DB表、SQL、Excel、自助数据集。分组表:将报表中的数据按相同项合并为一组显示。1、数据准备2、制作仪表板3、分享仪表板。左合并:保留左边全部数据,合并右边。右合并:保留右边全部数据,合并左边。上下拼接:上下拼接到一张表数据。3、如何实现拼表:多表拼一张。分组–业务包–数据集–字段。字段分类:数值、文本和日期。目录–仪表板–数据准备。维度:文本和日期类型。

Rsun2018的博客 1561

基于Cesium实现,动态水面+大坝排水动画

一、绘制面状水域,使用水波纹理,进行渲染,水体透明,可以看到底色。三、使用粒子系统,将喷泉改变方向,加上重力设置,实现排水动画。二、绘制线状三维体,用作模拟大坝拦截效果。四、最后,模拟水位上升,进行淹没分析,

一醉千秋的专栏 1418

决胜经典算法之插入排序

本场Chat是《决胜经典算法》系列的第三场。 本系列将包含如排序、查找、深度优先/广度优先搜索等等经典算法。仅仅排序部分就包含了10种经典的排序算法,适用于不同的场景,后续逐个给大家分享。 通过本场Chat,您将得到如下内容: 选择排序法课后习题解答; 插入排序法的原理; 动图演示插入排序的整个流程; 插入排序算法的流程图; 插入排序法的伪代码实现; 使用Java编程语...

GitChat 331

【局部规划模块曲线算法】曲线平滑介绍

本文先对轨迹平滑问题做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章提示:以下是本篇文章正文内容(1)适合给移动机器人运动的路径【满足运动学,高阶平滑】(2)高阶的运动学不能够突变的【至少三阶的加速度不能突变,最好四阶的jerk和五阶的snap也不能突变】(3)在转弯的地方不会停下来(4)加减速均衡,节省能量(5)节省时间的。

qq_35635374的博客 5714

【C语言】插入排序(经典算法,建议收藏!!!)

插入算法作为几大经典的排序算法之一。插入算法的基本原理就是在一串乱序的数字中,首先认为第一个数是有序的,然后从第二个数开始比较,每次比较都与前面排好序的部分由后往前进行比较,依此类推即可完成排序。

2301_81193162的博客 6826

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

经典算法之折半插入排序

经典算法之折半插入排序

weixin_68153081的博客 1762

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

经典算法——折半插入排序

任何被明确定义的计算过程都可以称作算法,它将某个值或一组值作为输入,并产生某个值或一组值作为输出。所以算法可以被称作将输入转为输出的一系列的计算步骤。说白了就是步骤明确的解决问题的方法。由于是在计算机中执行,所以通常先用伪代码来表示,清晰的表达出思路和步骤,这样在真正执行的时候,就可以使用不同的语言来实现出相同的效果。折半插入排序(binary insertion sort)是对插入排序算法的一种改进,由于排序算法过程中,就是不断的依次将元素插入前面已排好序的序列中。...

Lifelong learning 4144

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

经典算法之折半插入排序法

折半插入排序法详解

人生处处是围城,一切都是最好的安排! 2038

三、折半插入排序

三、折半插入排序 1.什么是折半插入排序 (Binary Insertion Sort)折半插入排序又称二分插入排序,是插入排序的一种。 折半插入排序是对直接插入排序的一种改进。 改进? (直接插入排序)线性查找 —> 折半查找 ​ 减少比较次数 基本思路: 每次插入操作,采用折半查找的方式,查找插入位置, ​ 然后再插入元素(先挪后插入)。 2.算法思路 step 1:找插入位置(Insertion Position) 待查找范围的下标 [low,high] 每次跟中间元素PK mid=(lo

Dumbking的博客 9288

python经典算法大全,python经典算法题

该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量(gap)”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。工作原理:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。选择排序是不稳定的排序方法。如果我们正在查找的元素大于中间元素,就可以消除中间元素以及比中间元素小的一半元素。

Night368的博客 1657

经典算法(3)-插入排序

经典算法(3)- 插入排序概述图解代码时间复杂度 概述 插入排序就像我们平常玩扑克牌一张一张拿起扑克牌然后排序一样,把数组的所有元素分为两组,已经排序的和未排序的,第一次默认左边第一个是排序好的,然后找到未排序的第一个元素,向已经排序的进行插入。通过倒叙遍历已经排序的元素,依次和待插入的元素进行比较,直到找到一个已经排序的元素小于等于待插入的元素,然后把该待插入的元素放到这个位置,把后面的已经排序好的元素向后移一位 图解 如上图是插入排序的全过程,第一轮,默认最左边的4是已经排序好的,所以待插入的第一个数

adai_study_java的博客 452

经典算法学习之---折半插入排序

本专栏为《手撕算法》栏目的子专栏:《经典算法》,会讲述一些经典算法,并进行分析。在此之前我们要先了解什么是算法,能够解决什么样的问题。以下为经典教材《Introduction.to.Algorithms》开篇中的内容。可以看到,任何被明确定义的计算过程都可以称作算法,它将某个值或一组值作为输入,并产生某个值或一组值作为输出。所以算法可以被称作将输入转为输出的一系列的计算步骤。这样的概括是比较标准和抽象的,其实说白了就是步骤明确的解决问题的方法。.........

沉淀所学,分享所思,让热爱与成长同行。商务记录AI实战经验,助力开发者快速成长。 热爱AI,希望做出有影响力的技术成果。 技术点亮生活,分享连接价值与机会。 专注AI落地实战,陪你走好技术每一步。 2061

从零实现插入排序:让编程小白也能轻松掌握经典算法

最新接入DeepSeek-V3模型,点击下载最新版本InsCode AI IDE 标题:从零实现插入排序:让编程小白也能轻松掌握经典算法 在计算机科学领域,排序算法是每一位程序员都绕不开的基础知识。其中,插入排序以其简单直观的逻辑和高效的表现,成为初学者入门排序算法的首选之一。然而,对于许多刚刚接触编程的小白来说,理解并实现插入排序仍可能存在一定的难度。那么,如何才能快速上手插入排序,并将其融入到...

StarfallRaven13的博客 889

经典算法之折半插入排序(Binary Insertion Sort)

折半插入排序(Binary Insertion Sort)是对直接插入排序算法的一种改进。每次找到一个数插入到前面有序的序列中,但是要用折半查找找到其位置!

阿莫夕林的博客 3627
上一篇: 经典算法(二)---冒泡排序
下一篇: 经典算法(四)---希尔排序
'撒野奔跑.
博客等级 码龄4年 185粉丝 19原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

'撒野奔跑.

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

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

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

打赏作者

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

抵扣说明:

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

余额充值