排序算法-插入排序

2023-09-14 10:10:04

属性

        当插入第i(i>=1)个元素时,前面的array[0],array[1],…,array[i-1]已经排好序,此时用array[i]的排序码与array[i1],array[i-2],…的排序码顺序进行比较,找到插入位置即将array[i]插入,原来位置上的元素顺序后移

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

代码及其注释

        

public class InsertSort {
    // 插入排序
    public static void insertSort(int[]arr){
        //首先比较第一个元素和第二个元素之间的大小关系,所以i从1开始
        for(int i=1;i<arr.length;i++){
            //将要进行比较的数放到一个临时变量中,此时就相当于i位置现在是空的
            int tmp=arr[i];
            //遍历i前面的数据,与temp中的数据进行比较
            int j=i-1;
            for(;j>=0;j--){
                //要是i前面的数据比i的数据大,就说明该数据应该在i数据之前,就将该数据向前移
                if(arr[j]>tmp){
                    arr[j+1]=arr[j];
                }
                //i前面的数据比i的数据小了,找到了合适的位置,就退出循环并将i的数据放到当前遍历到的j数据之前
                else {
                    break;
                }
            }
            //这里有特殊情况,当i前面的数据都比i大时,j的取值会一直取到-1,退出循环,此时就需要将i的值放到0的位置
            arr[j+1]=tmp;
        }
    }
}

更多推荐

利用亚马逊 云服务器 EC2 和S3免费套餐搭建私人网盘

网盘是一种在线存储服务,提供文件存储,访问,备份,贡献等功能,是我们日常中不可或缺的一种服务。很多互联网公司都为个人和企业提供免费的网盘服务。但这些免费服务都有一些限制,比如限制下载速度,限制文件大小,不能多人同时管理,不能实现一些定制化功能。如果想取消这些限制,就要付费。现在我给大家介绍一种免费,且功能无限制的私人网

线性代数的本质(七)——特征值和特征向量

特征值和特征向量本章特征值和特征向量的概念只在方阵的范畴内探讨。相似矩阵Grant:线性变换对应的矩阵依赖于所选择的基。一般情况下,同一个线性变换在不同基下的矩阵不同。仍然以平面线性变换为例,Grant选用标准坐标系下的基向量i,j\mathbfi,\mathbfji,j,线性变换TTT对应的矩阵为AAA,而Jenni

Unity 场景淡入淡出效果

一.使用Dotween,建议使用我的方式FindObjectOfType<SceneFadeInAndOut>().FadeIn(()=>{Debug.Log("FadeinMenuStartScene");});usingDG.Tweening;usingSystem;usingSystem.Numerics;usi

干洗店洗鞋店线上下单小程序方便快捷

在线下单是干洗店小程序最直接满足顾客使用需求的一项功能,让顾客能够直观了解到不同规格不同方式清洁衣物干洗的价格并且能够直接在线下单,能够极大缩短消费环节,提升下单可能性,管理后台还能够同步记录顾客订单数据,对门店的日常管理也大有帮助。上门取送的功能也是一个十分适合添加在干洗店小程序里的模块,对于时间或者交通不便的用户来

蓝牙技术|多快好省的苹果Find My查找定位方案商:北京自在科技

在电子市场里,各种蓝牙定位器品牌争奇斗艳,例如国外的TileMate和Slim,三星的GalaxySmartTag和GalaxySmartTag+,Chipolo的ONESpot,还有苹果的AirTag等等。而国内也有着不少优秀的品牌,如Nutale的Air和Pro,VanMoof最S3及X3电动单车,Belkin的S

yamot:一款功能强大的基于Web的服务器安全监控工具

关于yamotyamot是一款功能强大的基于Web的服务器安全监控工具,专为只有少量服务器的小型环境构建。yamot只会占用非常少的资源,并且几乎可以在任何设备上运行。该工具适用于Linux或BSD,当前版本暂不支持Windows平台。比如说,广大研究人员可以使用yamot来监控在家运行的RaspberryPi服务器。

leetcode21合并两个有序链表

题目:将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例1:输入:l1=[1,2,4],l2=[1,3,4]输出:[1,1,2,3,4,4]示例2:输入:l1=[],l2=[]输出:[]示例3:输入:l1=[],l2=[0]输出:[0]提示:两个链表的节点数目范围是[0,5

web端程序访问过慢时如何判断问题

当Web端程序访问过慢时,可以按照以下步骤进行问题判断和排查:1.确认问题:确认Web端程序访问真的过慢,可以通过以下方法进行测试:在不同浏览器和设备上测试访问速度,以排除个别设备或浏览器的问题。在不同时间段进行测试,以排除网络高峰期的影响。确认网络连接是否稳定,可以尝试在多个网络环境下进行测试。2.检查服务器性能:如

3D医学影像PACS系统源代码

一、系统概述3D医学影像PACS系统,它集影像存储服务器、影像诊断工作站及RIS报告系统于一身,主要有图像处理模块、影像数据管理模块、RIS报告模块、光盘存档模块、DICOM通讯模块、胶片打印输出等模块组成,具有完善的影像数据库管理功能,强大的图像后处理功能,提高了临床诊断准确率。二、三维影像重建支持三维影像处理功能;

代码签名:保护你的软件的安全性和完整性

代码签名是一种数字签名技术,用于保护软件的完整性和身份。它通过使用一个密钥对软件代码进行签名,确保代码在下载和安装过程中没有被篡改。代码签名证书是一种数字证书,用于证明代码签名者的身份和代码的完整性。以下是代码签名证书如何保护您的软件的详细说明:1,确保软件的完整性:代码签名证书可以确保您的软件在下载和安装过程中没有被

【cmake开发(5)】cmake 设置常规变量、环境变量、内置变量;cmake 带参数编译和 -D 选项; c++源码通过-D 选项的宏定义进行条件编译

文章目录一、CMake变量的定义1.1定义常规变量1.2打印变量1.3环境变量1.4持久缓存1.5持久缓存原理1.6内置变量二、带参数编译2.1我们可以看到了-D选项,一般配合option命令2.2c++源码通过-D选项的宏定义进行条件编译参考在【cmake开发(3)】中,我们设置了makeinstall安装目录。这就

热文推荐