怎样理解插入排序

Java实现与理解插入排序算法 本文还有配套的精品资源,点击获取 简介:插入排序是Java中常用的基础排序算法,通过构建有序序列来对未排序数据进行排序。本文将详细探讨Java中插入排序的实现,包括其基本步骤和示例代码,以及如何利用 main.java 和 README.txt 文件理解算法应用和上下文。学习插入排序将有助于提升对排序算法原理的理解和编程技能。 1. 插... 阅读详情

插入排序,把数组从第一个元素开始,每往后一个,将后一个元素插入到前面,使得前面的是序的.

给定无序数组如下:

把数组的首元素5作为有序区,此时有序区只有这一个元素:

第一轮

让元素8和有序区的元素依次比较。

8>5,所以元素8和元素5无需交换。

此时有序区的元素增加到两个:

第二轮

让元素6和有序区的元素依次比较。

6<8,所以把元素6和元素8进行交换:

6>5,所以把元素6和元素5无需交换。

此时有序区的元素增加到三个:

第三轮

让元素3和有序区的元素依次比较。

3<8,所以把元素3和元素8进行交换:

3<6,所以把元素3和元素6进行交换:

3<5,所以把元素3和元素5进行交换:

 

此时有序区的元素增加到四个:

以此类推,插入排序一共会进行(数组长度-1)轮,每一轮的结果如下:

package sort.insert;

import java.util.Arrays;

/**
 * @description: 插入排序
 * @author:tao
 * @create: 2019-12-27 17:48
 */
public class InsertSort {

    public static void main(String[] args) {
        int []array = {5, 8, 6, 3, 9, 2, 1, 7};
        System.out.println("原数组:" + Arrays.toString(array));
        insertSort(array);
        System.out.println("排序数组:" + Arrays.toString(array));
    }

    private static void insertSort(int []array) {

        int forTimes = 0;
        int swapTimes = 0;

        for (int i = 0; i < array.length-1; i++) {

            int j = i + 1;
            // 每次插入的元素
            int insertValue = array[j];
            boolean isSwap = false;
            for ( ; j > 0 && insertValue < array[j-1]; j--) {
                // (比insertValue大的值)平行移动
                forTimes++;
                swapTimes++;
                array[j] = array[j-1];
                isSwap = true;
            }
            if (isSwap) {
                // 找到插入位置
                array[j] = insertValue;
            }
            System.out.println("第" + i + "轮," + Arrays.toString(array) + ",插入元素是array["+ (i+1) +"]=" + insertValue + ", 插入位置是:array.index=" + j);
        }
        System.out.println("循环次数forTimes = " + forTimes);
        System.out.println("发生交换次数swapTimes = " + swapTimes);
    }
}

原数组:[5, 8, 6, 3, 9, 2, 1, 7]
第0轮,[5, 8, 6, 3, 9, 2, 1, 7],插入元素是array[1]=8, 插入位置是:array.index=1
第1轮,[5, 6, 8, 3, 9, 2, 1, 7],插入元素是array[2]=6, 插入位置是:array.index=1
第2轮,[3, 5, 6, 8, 9, 2, 1, 7],插入元素是array[3]=3, 插入位置是:array.index=0
第3轮,[3, 5, 6, 8, 9, 2, 1, 7],插入元素是array[4]=9, 插入位置是:array.index=4
第4轮,[2, 3, 5, 6, 8, 9, 1, 7],插入元素是array[5]=2, 插入位置是:array.index=0
第5轮,[1, 2, 3, 5, 6, 8, 9, 7],插入元素是array[6]=1, 插入位置是:array.index=0
第6轮,[1, 2, 3, 5, 6, 7, 8, 9],插入元素是array[7]=7, 插入位置是:array.index=5
循环次数forTimes = 17
发生交换次数swapTimes = 17
排序数组:[1, 2, 3, 5, 6, 7, 8, 9]

【仿真】Carla Python API实战:从零搭建自动驾驶测试环境 本文详细介绍了如何使用Carla Python API从零搭建自动驾驶测试环境。通过Carla仿真平台,开发者可以构建高度逼真的城市环境和车辆物理模型,利用Python API实现传感器配置、数据采集、场景构建及自动驾驶算法集成。文章还分享了实际项目中的调试技巧和性能优化经验,帮助读者快速掌握自动驾驶仿真测试的核心技术。 阅读详情

相关推荐

Flowable高级篇 -6.8.0 最全表结构说明-主要表结构字段注释

flowable 28张表 详细

billzhen的博客 1万+

JavaScript数组函数unshift、shift、pop、push使用实例

一、unshift 在数组第一个元素前插入元素 // 使用unshift在数组第一个元素前插入元素 // 返回数组长度 var tmp = ['a','b']; var len = tmp.unshift('c'); alert(len); // 3 alert(tmp); // c,a,b 也可以一次插入多个元素,顺序依次从左边排起 // 使用unshift在数组第一个元

曹浩洋的专栏 2262

MIPI CSI-2 协议解析

CSI-2标准协议前言一、Overview of CSI-2二、CSI-2 layer Definitions三、 Camera Control Interface(CCI)3.1 数据传输协议(Data Transfer Protocol)3.1.1 消息类型(Message Type)3.1.2 读写操作(Read/Write Operations)3.1.2.1 随机位置单次读3.1.2.2 当前位置单次读3.1.2.3 随机位置连续读3.1.2.4 当前位置连续读3.1.2.5 随机位置单次写3.1

Lucky 3万+

js数组方法

???? 1. push() 给数组的末尾添加一个或多个元素。格式:数组.push(参数1,参数2…) let arr = [1,2,3] let temp = arr.push(4) console.log(arr) // 输出 1 2 3 4原数组改变 console.log(temp) // 输出4,返回添加元素后数组长度 ???? 2. unshift() 给数组的首位添加一个或多个元素。格式:数组.unshift(参数1,参数2…) let arr = [2,3,4] let temp = ar

m0_51328823的博客 1437

WSL 运行make提示/lib/modules/xxx/build: No such file or directory. Stop.错误解决办法

WSL运行make提示/lib//modules/xxx文件或目录不存在。 WSL2的内核是修改过的,无法使用 ubuntu上游的内核头文件和modules文件,因此,我们需要手动编译并安装一个版本。

weixin_45668903的博客 1万+

vue接入海康4G版摄像头通过萤石云平台推送视频流教程

vue-video-player接入海康视频,videojs-contrib-hls,vue播放视频

renkai721的专栏 7278

JS数组添加元素的三种方式

JS数组添加元素的三种方式 1、push() 结尾添加   数组.push(元素) 参数描述newelement1必需。要添加到数组的第一个元素。newelement2可选。要添加到数组的第二个元素。newelementX可选。可添加多个元素。 2、unshift() 头部添加   数组.unshift(元素) 参数描述newelement1必需。向数组添加的第一个元素。newelement2可选。向数组添加的第二个元素。newelementX可选。可添加若干个元素。 3、splice() 方法向/从数组指

m0_46404694的博客 7170

vue3 - 最新详细实现高德地图绘制动态热力图详细教程,在某区域或城市地图上做“热力图层“展示人流量、旅游人口密度、热量图、全国地区地理热力图,利用颜色的深浅表示密度或强度等场景(详细示例代码教程)

vue3,nuxt3,高德地图,热力图,绘制热力图层,人流量,vue3使用高德地图实现某个区域热力图,vue3高德地图api加载热力图及关闭,接收热力图数据并渲染热力图,关掉热力图,Vue使用高德API制作热力图,热力图加载不出来,电子围栏围住热力图,vue3中使用高德地图渲染热力图组件,高德地图使用热力图详细教程,报错,卡顿,出不来怎么办,无法关闭,怎么解决这个问题,出错,城市名称,城市某个街道,城区,省份,市区,县城,乡镇,村,各省份的热力图,交通流量,人口流量,密度,旅游出行,人口数量,颜色介绍,深浅

✅ 精选推荐文章 5205

数组的一些方法

1. 数组头部插入数据 数据头部插入数据,你是否还在用JS提供的unshift()方法 let arr = [1,2,3] arr.unshift('我是头部插入的数据') console.log(arr) // => ['我是头部插入的数据', 1, 2, 3] 现在21世纪了,得用新的思路去解决问题,考虑到性能的问题,现在我们可以采用以下的办法实现数组插入数据 let arr = [1,2,3] let newArr = ['haha'].concat(arr) .

weixin_51127384的博客 4128

【滚雪球学数学建模】第1节·建模入门+三步法+案例

🎓 本文收录于 《滚雪球学数学建模》专栏,本专栏专注于从零基础出发,带你循序渐进掌握数学建模的核心方法与思维路径。通过“滚雪球式”学习法,从最简单的生活化案例到经典建模工具,再到省赛、国赛真题实战演练,逐步积累知识与技能,帮助你搭建完整的建模体系。无论你是刚接触建模的新生,还是希望提升科研与竞赛能力的学者与工程师,本专栏都将为你提供一条清晰、高效、可实操的建模成长路线,助力你快速进阶,突破难点,迈向数学建模竞赛与实际应用的更高峰 🚀!

**My Coding Family** 6412

am62x A53与R5F通信

AM62x是Ti的一款异构多核芯片。remoteproc驱动,硬编码(写死)了R5F/M4F固件的名字,这样驱动启动时,就会找硬件编码的固件,下面是其对应关系。值得注意的是,linux内核中的M4F remoteproc驱动启动M4F,而linux内核中的R5F remoreteproc驱动不启动R5F,相反,它attach到已经在boot阶段启动的R5F固件上。在/lib/firmware的真实固件名:,而我们生成的固件名如下所示,没有直接对应的,经确认,.out文件就是我们需要的,重命名后即可。

鹰之翔 1361

javascript专题2 ---- 在 JavaScript 列表(数组)的第一个位置插入数据

在 JavaScript 列表(数组)的第一个位置插入数据

涉及毕业论文、远程调试、网站、小程序、app、python、前端、pycharm、vscode等 2280

mapbox进阶,dem数据转为等高面,加载转换后的等高面到地图

本文详细介绍如何基于mapbox-gl v3.*.* 版本,使用dem数据转为等高面,加载转换后的等高面到地图,亲测可用。希望能帮助到您。一起学习,加油!加油!

我哎GIS博客 407

插入排序的超级简单理解

之前我可能不太理解,但是经过大一学过,大四回顾,前两天又看视频,对于插入排序,终于有了新的理解 import java.util.Arrays; public class InsertionSort { public static void main(String[] args) { int array[]= {9,8,7,6,5,4,3,2,1}; sort(array); System.out.println(Arrays.toString(array)); } pub

qq_45750255的博客 230

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

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

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

对插入排序的理解

一、插入排序的算法思路 对于待排序的n个记录(R1,  R2,  R3 ,`````,Rn ),假设第一个记录R1 有序, 然后从第二个记录R2 开始依次将其插入到前面的有序序列中。 二、java代码 public class InsertSort{ public static void sort(long[] array){ long temp;

Abe32的博客 491

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

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

插入排序的通俗理解

插入排序的通俗理解: public class InsertSort2 { public static void main(String[] args) { int [] a = {23,54,54,6,6,7,8,2,54,6,7,8,9,9,990} ; printArrayBef(a) ; insertSort(a) ; printArrayAft(a) ; }

jeny_BAE的博客 478

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

插入排序的理解

理解: 首先,将数组中的前两个数进行比较,小的在前,大的在后。然后对剩余的数一一与排好序的新数组比较,直到小于新数组中的某一位时,将该位数组值插入这个比它大的值的前面。 代码: public class chaRu { public static void main(String[] args) { // TODO Auto-generated method stub ...

三千炼心的博客 262

谈下自己对插入排序的理解吧!

在写这篇文章的时候 ,感觉比较纠结,因为我昨天已经敲了一遍结果一刷新没了!!对于插入算法,感觉就是我们玩纸牌的时候,将牌按顺序依次向前移动一样。自己用Dc敲了一遍代码,如下: #include #include #define num 100 int main() { int a[num]; int i,j,key,n; printf("请输入数字的个数:"); scanf(

火红的枫叶林 467

数组——插入排序法(初步理解)

插入排序法: 插入排序法(Insertion Sorting)的基本思想是:把n个待排序的元素看成一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的和适当位置,使之成为新的有序表。博主是利用最原始的代入数值法,才搞明白这个算法的原理,注释有点啰嗦,不过最终运行后

YuJar的专栏 1829

算法导论中插入排序的个人理解

算法导论中插入排序的个人理解(算法导论第10页),伪代码如下: 伪代码运行步骤: 第1行:for循环:从A数组的第二个数一直插入,直到A数组的最后一个数(j表示当前时数组的第几个数) 第2行:将数组的当前值赋给key 第4行:i为j的值-1,(A[i]即数组的第j-1个数) 第5、6、7行:当i>0而且数组的第j-1的数值大于数组的j个数时: 将A的第j-1的数值赋值到A的第j个位置,将i...

qq_42884482的博客 346

插入排序算法的理解和实现

插入排序是一种基础排序,相较于冒泡排序的暴力,插入排序是一种更优化的排序。算法实现过程有很多种,以下是个人在实现插入排序的思路:先准备好不是重点的测试数据: public static void main(String[] args) { int arr[] = new int [] {0,24,13,29,62,77,68,26,63,86}; System.out.println("排...

qq_34588237的博客 190

简单理解插入排序

  在这里,我详细的讲一下我个人对于插入排序的理解。   每个人对于事物的理解都是不一样的,因为每个人对世界万物的看法和思考方式都不一样。因此,对于排序算法,我想每个人都有自己的理解方式,所以,虽然博客园里有很多关于排序的文章,但那只是其他人对这几个排序的理解方式,而笔者也有自己的理解方式,所以,笔者也就没有在意博客园写了那么多关于排序的文章而还在这里写下个人的见解了。   对于插入排序,笔者...

weixin_34124577的博客 215

终于理解希尔排序与插入排序

希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,同时该算法是冲破O(n2)的第一批算法之一。 希尔排序(Shell sort) 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序; 随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。 算法描述 先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,具体算...

weistar103的专栏 923

插入排序 | 通俗易懂的理解排序过程

插入排序 —— 也不难嘛!

是圣洁呀✨ 603

理解插入排序

#include<stdio.h> //自定义的输出函数 voidprint(inta[],intn,inti){ printf("%d:",i); for(intj=0;j<n;j++){ printf("%d",a[j]); } printf("\n"); } voidinsert_sort(inta[],inti) { intj,k,l; for(j=1;j<i;...

qq_38917395的博客 90

插入排序(动图理解)

明人不说暗话,动图是从https://www.cnblogs.com/onepixel/articles/7674659.html拿滴。

HumorChen的博客 4850
上一篇: 怎样理解选择排序
下一篇: 怎样理解快速排序
小涛_foxiaotao
博客等级 码龄14年 2粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值