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

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

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

概述

插入排序就像我们平常玩扑克牌一张一张拿起扑克牌然后排序一样,把数组的所有元素分为两组,已经排序的和未排序的,第一次默认左边第一个是排序好的,然后找到未排序的第一个元素,向已经排序的进行插入。通过倒叙遍历已经排序的元素,依次和待插入的元素进行比较,直到找到一个已经排序的元素小于等于待插入的元素,然后把该待插入的元素放到这个位置,把后面的已经排序好的元素向后移一位

图解

在这里插入图片描述
如上图是插入排序的全过程,第一轮,默认最左边的4是已经排序好的,所以待插入的第一个数字是2,2小于4,那么2就放到4的位置,4的位置往后移一位。第二轮,待插入的数字是1,1小于4,1放在4的位置,4的位置后移一位,1小于2,那么1放在2的位置,2的位置往后移一位。第三轮,待插入的数字为10,10大于4,因为4往前的元素都是比4小的,所以10大于4,自然也大于4以前的元素,所以10的位置不用移动。第四轮,待插入的数字为5,5小于10,但5大于4,所以5的位置应该放在10的前面,10往后移一位。最终排序好的顺序为[1,2,4,5,10]

代码

public void sort(int array[]){
        //循环控制轮数,第一次待插入的元素是第二位,所以i的初始值为1
        for (int i = 1; i < array.length; i++) {
            //循环控制每一轮待插入元素和已排序元素比较的次数,从待插入前面到索引为0的元素
            for (int j = i; j > 0; j--) {
                /**
                 * 比较待插入的元素,与待插入前那个已排序的元素,注意待插入的元素不能表示为array[i],
                 * 因为如果有比待插入大的,那么待插入的位置就不是i了,待插入的位置应该表示为j
                 */
                if(array[j-1] > array[j]){
                    int temp = array[j-1];
                    array[j-1] = array[j];
                    array[j] = temp;
                }else{
                    break;
                }
            }
        }
    }

时间复杂度

插入排序的时间复杂度与冒泡排序和选择排序的时间复杂度是一样的第一轮需要找(n-1)次,第二轮需要找(n-2)次,以此类推第(n-1)轮需要找1次,则总共需要 ∑ i = 1 n − 1 ( n − 1 ) = 1 + 2 + 3 + . . . + ( n − 1 ) = n 2 2 − n 2 \sum_{i=1}^{n-1} (n-1)=1+2+3+...+(n-1)=\frac{n^2}{2}-\frac{n}{2} ∑i=1n−1​(n−1)=1+2+3+...+(n−1)=2n2​−2n​次,所以选择排序的时间复杂度为:O( n 2 n^2 n2)

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

相关推荐

基于aarch64分析kernel源码 六:kernel_init进程(1号进程)、kthreadd进程(2号进程)

kernel_init进程(1号进程)、kthreadd进程(2号进程)分析

OnlyLove_的博客 763

插入排序算法

插入排序的核心思想是: 1 向一个已有序的队列中插入数据, n个数,那么只需要插入n-1次 实现如下: 将第一个数看作一个自然有序的队列. #include <iostream> #include <algorithm> using namespace std; void InsertSoft(int* a,int length) { if(a != NULL && length > 0) { for(int i = 1;i &l

qq_25160759的博客 317

以太网测试用例(光模块线缆、网卡类设备、交换类设备)

LeCroy力科网络测试相关的测试用例分享:光模块/DAC/ACC/AEC/AOC测试,网卡类产品测试/GPU/DPU/SmartNIC,交换类产品测试。涉及物理层的FEC,SKEW,Tx/Rx Taps和Layer23层的网络性能测试/吞吐量延迟抖动丢包率背靠背性能,以及RDMA带状况的网络协议分析。同步提供400G高速的以太网的损伤,提供定量,可重复的负面压力测试环境。

专注有线以太网性能测试--丹麦信雅纳网络(Xena Networks) 1989

插入排序中元素的移动次数

题目大意:根据插入排序算法的原理,计算每个元素的移动次数。例如:数组A=[2,1,3,1,2]A=[2, 1, 3, 1, 2],那么按从左往右的顺序依次移动插入元素,他们的移动次数分别如下: shift(2)=0,shift(1)=1,shift(3)=0,shift(1)=2,shift(2)=1shift(2)=0, shift(1)=1, shift(3)=0, shift(1)=2, s

交流学习实践 6106

【WILEY】从Revision到Online:一次投稿的完整状态演进与关键节点实战解析

本文详细解析了从Revision到Online发表的完整投稿流程,包括修改稿准备、回复信撰写、状态跟踪等关键节点。特别针对Wiley期刊,提供了实用的操作技巧和常见问题解决方案,帮助作者高效完成论文修改与发表。

weixin_29219189的博客 361

计算机视觉-全景图像拼接中的特征匹配与优化策略

本文深入探讨了计算机视觉中全景图像拼接的核心技术,重点解析了特征匹配后的关键优化策略。通过SIFT特征提取、RANSAC算法剔除误匹配,并结合APAP算法应对视差与鬼影问题,详细阐述了从基础对齐到无缝融合的完整流程,为开发者实现高质量全景拼接提供了实用指南。

weixin_29039773的博客 361

排序算法之插入排序

插入排序一般分为直接插入排序和二分插入排序。 一、直接插入排序:直接插入排序又可以分为前插和后插,不过虽然是这样分,只是寻找地点的方向不一样而已。“前插”就是从头开始找合适的位置,“后插”就是从后面开始找合适的位置。直接插入排序的思想很简单,开始时,整个数组都是无序的,默认第一个数是排好序的,然后要把第二个数插入到前面,那么就要找到合适的位置插入,从当前数的前一个数$a与当前数$s进行比较,...

weixin_34049032的博客 141

海康工业相机硬件触发与YOLOv5实时检测的工业自动化实践

本文详细介绍了如何将海康工业相机的硬件触发模式与YOLOv5目标检测模型相结合,构建一套高实时性的工业自动化质检系统。文章从产线痛点出发,深入解析了硬件接线、SDK回调取图的实战技巧(包括规避常见Bug),并展示了如何将YOLOv5封装为服务,最终通过Flask API串联业务逻辑,实现从精准触发到实时AI判断的完整落地流程。

k6l7m8n9的博客 492

快速排序(快排+插入排序版)

#include<iostream> #define ElementType int #define Cutoff 10 using namespace std; void Swap(ElementType *i,ElementType *j){ *i = *i+*j; *j = *i-*j; *i = *i-*j; } void InsertionSort( ElementType A[], int N ) { /* 插入排序 */ int P, i;

weixin_44268185的博客 151

CenterPoint 工程复现

CenterPoint 工程复现,本文中使用版本:BEVerse工程下的mmdet3d (`MMDet3d v0.17.3`)版本,MMDetection3D中其他版本的使用`大同小异`。

Darchan的博客 5663

通信原理 | 窗函数 | 矩形窗 | 汉宁窗 | 汉明窗 | 布莱克曼窗 | 补零对频谱的影响

比如,原信号是一个周期的余弦信号,又给它补了9个周期长度的0,那么信号并不是10个周期的余弦信号,而是一个周期的余弦加一串0,补零并没有带来新的信息!频谱分辨率的含义是两个频率不同的信号在频率上可分,也就要求他们不能落到一个频域函数的主瓣上,所以,如果待分析的两个信号频率接近,而时域长度又短,那么在频域上他们就落在一个频域函数的主瓣内了,补再多的零也无济于事。而形状(主瓣宽度)是由补零之前的信号长度决定的,补零的作用只是细化了频域序列,并没有改变其主瓣宽度。所以,汉宁窗牺牲了分辨率,换来了旁瓣泄露的减小。

若北辰 1302

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

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

2301_81193162的博客 6826

把注释掉的代码删除掉:在 SAP ABAP 团队里打造可回溯、可测试、可演进的代码库

摘要 SAP ABAP项目中常见的"注释掉代码"反模式存在严重隐患:它增加代码噪音,制造虚假安全感,并可能引发安全和合规风险。Clean ABAP指南明确建议删除这类代码,理由包括: 版本控制系统已提供完整历史回溯能力 注释代码会误导开发者,增加理解成本 临时禁用需求应通过Feature Toggle实现 必须保留的参考代码应放入$TMP等隔离区域 团队应建立自动化检查机制,将"删除注释代码"纳入工程规范,确保代码库只表达当前有效的行为逻辑。在AI时代,可以利用工具辅

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2449

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

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

Lifelong learning 4144

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

经典算法之折半插入排序

学习折半二分法查找,到插入排序,在到折半插入排序,内容算法复杂度一点点的递增。犹如建房子需要打好地基,一点点的实施组合,才能建成高耸入云的楼房。知识需要一点点的积累,才能展现更大的才能。不积跬步无以至千里,不积小流无以成江海。...

qq_46641047的博客 488

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

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

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

Night368的博客 1657

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

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

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

StarfallRaven13的博客 889

经典算法 之 插入排序 python实现

介绍了经典算法中的插入排序,包括直接插入排序和折半插入排序。并评价了其时间复杂度、稳定性等指标,最后给出了其python实现。

FFTang的博客 388

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

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

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

经典算法 之 折半插入排序 python实现

本文介绍了排序的概念,折半插入排序的算法原理,并给出了python实现。

FFTang的博客 663

【经典算法5——折半插入排序】

排序是计算机内经常进行的一种操作,其目的是将一组“无序”的记录序列调整为“有序”的记录序列。例如:将下列关键字序列调整为。

qq_63851703的博客 479

【21天学习经典算法】折半查找与折半插入排序(附Python完整代码)

本文主要讲述了折半查找算法与折半插入排序算法的工作方式和伪代码,最后使用了Python语言实现了算法逻辑。

Albert_Lsk的博客 1683

经典算法之插入排序

经典算法之插入排序

xiaogaotongxue__的博客 442

21天打卡挑战 - 经典算法之折半插入排序

折半插入排序(Binary Insertion Sort)是一种插入排序算法,通过不断地将数据元素插入到合适的位置进行排序,在寻找插入点时采用了折半查找。

引用原创内容标明出处即可 997
上一篇: 经典算法(2)-选择排序
下一篇: 经典算法(4)-希尔排序
磕瓜子
博客等级 码龄6年 3粉丝 7原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值