插入排序-八大排序(三)

数据结构试题3 数据结构试题32007-01-18 10:28 〖微笑天使收集整理QQ:84024257〗 一、选择题(每小题2分,共8分) 1. 若需要利用形参直接访问实参,则应把形参变量说明为( )参数。 A 阅读详情

插入排序

 基本思想:

1.把n个待排序的元素看成为一个有序表和一个无序表,
开始时有序表只包含一个元素,无序表中包含n-1个元素,
2.排序过程中每次从无序表中取出第一个元素,
她的排序码依次与有序表的排序码进行比较
3.将它插入到有序表中的适当位置,使之成为新的有序表。

首先写一个插入排序方法

  public  static void insertSort(int [] arr){
        for (int i = 1; i <arr.length ; i++) {
            //定义待插入的数
            int insertVal=arr[i];
            int insertIndex=i-1;//即arr[i]前面这个数的下标
            /*
            * 1.insertIndex>=0 保证在给insertVal找到插入位置,不越界
            * 2.insertVal<arr[insertIndex]待插入的数,还没有找到插入的位置
            * 3.就需要将arr[insertIndex]后移*/
            while (insertIndex>=0&&insertVal<arr[insertIndex]){
                arr[insertIndex+1]=arr[insertIndex];//将arr[insertIndex]向后移一位
                insertIndex--;
            }
            /*退出while循环说明找到了插入的位置,insertIndex+1*/
            arr[insertIndex+1]=insertVal;
            count++;
            System.out.printf("第%d轮"+Arrays.toString(arr)+"\n",count);
        }
    }

还有一种写法更加简洁 我个人更喜欢这一种

 public  static void insertSort(int [] arr){
   for (int i = 1; i <arr.length ; i++) {
            int j=i;//写一个指针j指向i
            int temp=arr[i];//暂存一下待插入的值
            //j-1>0防止数组下标越界
            // temp<arr[j-1]与前一个数比较假如小于 就让前一个数后移一位
            while (j-1>=0&&temp<arr[j-1]){
                arr[j]=arr[j-1];//后移
                j--;//继续与前前一个数比较
        }
            arr[j]=temp;//大于的话不移动
        }
    }

然后测试

  public static void main(String[] args) {
          int [] arr={4,2,5,6,1};
          System.out.println("排序前"+Arrays.toString(arr));
          insertSort(arr);
    }

最后是结果图

在这里插入图片描述

八大排序之插入排序和归并排序 直接插入排序的特性总结:1. 元素集合越接近有序,直接插入排序算法的时间效率越高2. 时间复杂度:O(N^2)3. 空间复杂度:O(1),它是一种稳定的排序算法4. 稳定性:稳定。 阅读详情

相关推荐

《糊涂算法》之八大排序——插入排序

插入排序

公号:一条coding 1万+

排序算法:插入排序

【介绍】 每次从无序表中取出第一个元素,把它插入到有序表中合适的位置,是有序表仍然有序。 【分析】 第一趟比较前两个数,然后把第二个数按大小插入到有序表中; 第二趟把第三个数据与前两个数从前向后扫描,把第三个数按大下坡插入到有序表中; 一次下去,进行了(n-1)趟扫描以后就完成了整个排序过程 【代码】 #include using namespace std; void print

Harold_Finch的博客 717

医疗设备安规入门:一张图搞懂BF型设备的MOOP/MOPP绝缘路径(附GB 9706.1附录解析)

本文深入解析了BF型医疗设备的MOOP/MOPP绝缘路径设计,结合GB 9706.1标准附录J的实战应用,帮助工程师快速掌握医疗设备安规要点。通过典型绝缘路径图分析,详细对比了MOOP与MOPP的防护差异,并提供了海拔修正、漏电流测试等关键设计指南,助力医疗设备安全合规。

weixin_30633405的博客 392

算法学习之旅,中级篇(2)-–插入排序

介绍 每次从无序表中取出第一个元素,把它插入到有序表中的合适位置。 分析 第一趟:比较前两个数的大小,然后把其中最小的插入排在第一个位置。 第二趟:比较第三个数与前两个数的大小,大的数后移,知道遇到小的,便插入到较小数的后面,数不再移动。 依次进行,进行了N-1躺后,就完成了整个排序过程。 代码#include<iostream> using namespace std; void pr

Archar_Saber的博客 599

建议收藏:华为海思IC设计笔试题,含解析(附下载)

接触过的部门有麒麟芯片、CPU/GPU,总体面试感觉非常好,规范且认真,第一轮手撕代码状态机+复盘机考题+瞄准几个知识点深挖,时间1hour+;一二轮面试是连着的,所以很累。但是岗位就那么多,在面试的时候,很多同学因为准备不充分,与岗位失之交臂,无缘进入该公司。时序电路有记忆功能,不会产生锁存器,锁存器一般在组合逻辑中case写不全,else写不全,或者敏感列表写不全。

nuoweishizi的博客 3289

水气泵控制原理,三角波发生电路,LM331M/TR芯片,高速运放芯片

气泵的控制采用闭环控制,根据气泵的FG反馈信号进行反馈调节,由于气泵的反馈信号是脉冲反馈,即频率改变,占空比不变,即需要通过F/V转换芯片转换成电压信号,变为电压与转速成正比,其电压进入比较器与基准电压进行比较,将比较结果进行运算并进行PWM控制信号。水泵的控制采用闭环控制,根据水泵的pwm信号进行反馈调节,水泵的反馈信号是脉冲反馈,即频率改变,占空比不变,即需要通过F/V转换芯片转换成电压信号,变为电压与转速成反比,其电压进入比较器与基准电压进行比较,将比较结果进行运算并对PWM控制信号。

m0_51010122的博客 2857

数据结构-排序算法1

一、排序的定义 1. 排序:重新排列表中的元素,使表中的元素满足关键字递增或递减的过程。 2. 算法的稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,ri=rj,且ri在rj之前,而在排序后的序列中,ri仍在rj之前,则称这种排序算法是稳定的;否则称为不稳定的。 3. 排序算法分类: 内部排序:指

ziruoxiangyi的博客 328

【推荐100个unity插件】unity实现交互式火焰 —— Ignis

Ignis是一款Unity互动式消防系统插件,可轻松将物体转换为可燃物。支持固体、植被、蒙皮网格和地形树木等多种对象类型,提供火焰蔓延、熄灭等效果。安装需通过Unity Package Manager添加Visual Effects Graph,并按照指引转换目标物体材质。使用盒型碰撞体或网格计算燃烧区域,可自定义火焰参数和视觉效果。内置多种转换选项,如Flammable Vegetation、Flammable Skinned Mesh等,适用于不同场景需求。注意使用前需备份材质和地形数据,并提供性能优化

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 2240

排序算法之插入排序

插入排序 (Insertion Sorting) 的基本思想是: 把 n 个待排序的元素看成为一个有序表和一个无序表, 开始有序表只包含一个元素, 无序表中包含有 n-1 个元素, 排序过程中每次从无序表中取出第一个元素, 把它的排序码依次与有序表元素的排序码进行比较, 将它插入到有序表中的适当位置,使之成为新的有序表。 插入排序的算法code: class Inser...

shao15232的博客 431

【即插即用模块】Transformer篇 | CVPR 2025 | SADA:多尺度+可变形采样,完美替换自注意力实现涨点!

文章摘要 本文提出了一种尺度自适应可变形注意力模块(SADA),用于处理图像修复中的结构化伪影问题。SADA通过多尺度多头机制捕获远程依赖关系,并引入可变形采样偏移来有效处理非均匀空间分布的模式。该模块适用于底层视觉任务,可替代ViT自注意力,实验证明能显著提升性能。代码已开源,支持即插即用集成。 核心特点: 多尺度头适应不同大小的重复模式 可变形偏移优化非均匀分布采样 轻量级设计,易于集成到现有架构 适用场景:图像去噪、超分辨率等底层视觉任务。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 1431

Simulink仿真入门到精通(三) Simulink信号

本系列教程是根据孙忠潇编著的<<Simulink仿真及代码生成技术入门到精通>>学习笔记。 目录 Simulink仿真入门到精通(一) Simulink界面介绍 Simulink仿真入门到精通(二) Simulink模块 Simulink仿真入门到精通(三) Simulink信号 Simulink仿真入门到精通(四) Simulink子系统 Simulink仿真入门到精通(五) Simulink模型的仿真 Simulink仿真入门到精通(六) Simulink模型保存为图片 Sim

king110108的专栏 5397

八大排序之——插入排序(三)

概述 图示 代码

133

Figma 设计稿转前端代码:Cursor 实现 UI 还原的 4 种精准映射方法

揭示 Figma 设计稿转前端代码失效的根本原因在于四层语义未对齐(像素→布局、视觉→样式、交互→行为、意图→架构),提出以语义标注为核心的结构化喂数据方法,详解通过图层命名、Description 字段和 Markdown 上下文锚点实现高精度 React 组件生成,并给出可落地的避坑指南与实测提

weixin_42545292的博客 140

八大排序算法之(三)插入排序 折半插入排序

折半插入排序算法原理:把一个新的元素插入已经拍好顺序的数组的过程中,寻找插入位置时,将待插入区域的首元素设置为a[left],末元素设置为a[right],比较时,将待插入元素与a[mid],其中mid=(left+right)/2相比较,如果比参考元素小,则选择a[left]到a[mid-1]为新的插入区域(即right=m-1),否则选择a[mid+1]到a[right]为新的插入区域(即le

thecentury的博客 2万+

【38】OpenCV C++实战篇——基于多项式插值的亚像素边缘定位算法

亚像素边缘定位算法实现 本文介绍了一种基于多项式插值的亚像素边缘定位算法,用于提高图像边缘检测的精度。文章首先分析了传统像素级边缘检测方法(如Canny、Sobel)的局限性,指出其在测量应用中的精度不足问题。 算法核心 梯度计算:使用8个方向模板进行卷积运算生成梯度图像 亚像素定位:采用多项式插值方法改进边缘定位精度 实现步骤: 生成8个方向的卷积模板(0°、45°、90°等) 利用filter2D函数计算各方向梯度 通过归一化处理显示梯度图像 代码特点 提供完整的C++实现代码 包含模板生成、梯度计算和

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 1099

怀旧版电脑GBC模拟器

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

插入排序最优_八大排序 python实现 精讲(三)插入排序

由于不可抗力原因导致拖更两天,很是惭愧,今天尽量多更一点~社 畜 之 泪插入排序 (Insertion Sort)算法思想插入排序的算法思想也很直观:每次从待排序数组中取一个元素,在已排序数组中找到其应该在的位置插入,后面的元素则依次向后移动一位。算法步骤第一个元素默认已有序;取下一个待比较元素,从已排序的序列中从后往前扫描;如果当前已排序序列元素 > 当前待比较元素,则已排序序列元素向后移...

weixin_39961369的博客 269

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

八大排序算法(三)插入排序

时间复杂度:O(nlogn) 基本原理 插入排序(英语:Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。 动态图 // int[] arr = new int[] {17,3,25,14,20,9}; public static void main(String[] args) { i

海角12138的博客 157

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

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

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

python从后向前匹配_八大排序 python实现 精讲(三)插入排序

由于不可抗力原因导致拖更两天,很是惭愧,今天尽量多更一点~社 畜 之 泪插入排序 (Insertion Sort)算法思想插入排序的算法思想也很直观:每次从待排序数组中取一个元素,在已排序数组中找到其应该在的位置插入,后面的元素则依次向后移动一位。算法步骤第一个元素默认已有序;取下一个待比较元素,从已排序的序列中从后往前扫描;如果当前已排序序列元素 > 当前待比较元素,则已排序序列元素向后移...

weixin_33469623的博客 497

八大排序(三)------插入排序

思想 插入排序(英语:Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。 public class InsertSort { public static void main(String[] args) { int[] arr =new int[] {5,7,4,2,0,3,1

qq_51114151的博客 136

【数据结构】八大排序

八大排序

2203_76003626的博客 3483

【八大排序(一)】插入排序,选择排序

博主前段时间接到了专业课老师的任务:让我设计个排序算法用来给学生成绩排名.我心里一惊!这不是为难我这个只会冒泡的大学生嘛于是我删掉了王者荣耀,删掉了吃鸡我奋不顾身,我披星戴月的肝八大排序终于!我现在学成归来下面就给大家分享八大排序中的前两个:插入排序选择排序我们的八大排序中,插入排序选择和冒泡可以分为一类,可以横向对比插入排序 > 冒泡排序 > 选择排序好家伙合着冒泡还不是最菜的是吧(狗头保命)这里给大家分享两个动图网站里面的动图可以帮助我们理解。

iwanna1fd的博客 731

八大排序算法之插入排序+希尔排序

插入排序超进化:希尔排序

小青菜的博客 2641

「数据结构」八大排序之插入排序,居然这么简单?

【数据结构初阶】第一篇——八大经典排序算法之插入排序总结(图解+动图演示+代码实现+八大排序比较)

Edison's 小宇宙 5033

【八大排序(十)】八大排序效率与稳定性分析

八大排序效率以及稳定性分析详解,内附八大排序全部代码,以及图文讲解,看完就会的细!

杭电码农-NEO的博客 3054

八大排序算法

排序是计算机科学中最基础、应用最广泛的算法之一。它将一组无序的数据元素(或记录)按照某种特定的顺序(如升序或降序)重新排列,是数据检索、统计分析、高效算法设计等众多领域的基石。本章总结了学习过程中八大排序算法,包括比较排序和非比较排序。

努力学习C++的熊大(保护森林版) 2337

八大排序之简单插入排序

简单插入排序 排序原理: 把所有的元素分为两组,已经排序的和未排序的; 找到未排序的组中的第一个元素,向已经排序的组中进行插入; 倒叙遍历已经排序的元素,依次和待插入的元素进行比较,直到找到一个元素小于等于待插入元素,那么就把待插入元素放到这个位置,其他的元素向后移动一位。 对第五趟排序分析 每一次插入,相当于取最小的冒泡排序,区别在于这是冒泡的最小的数。 java代码 import java.util.Arrays; public class InsertSort { public st

RwTo的博客 999
上一篇: 选择排序-八大排序(二)
下一篇: 希尔排序-八大排序(四)
来来爱编程
博客等级 码龄7年 375粉丝 81原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值