插入排序(Java实现)

news/2024/7/7 21:03:16

前言

    稳定性:如果一个排序是稳定的,是可以变成不稳定的,此时这个排序归结为稳定,但是如果这个排序本身是不稳定的,是不可以变成稳定的,此时这个排序是不稳定的。

    过程:如果数组中只有一个元素,这个数组当前就是有序的,当数组中有多个元素,要对其进行插入排序,此时就可以定义一个下标 i,来控制比较的元素,可以将 i 放到 tmp 中,然后 j 控制被比较的元素,一直比较的是 i 和 i 下标之前的所有的元素。

// 插入排序
    // 过程 arr[1]元素放到tmp中,j下标控制数组前边的元素去和tmp中的值去比较
    // 如果比 tmp 中的值大,此时让所有大的值往后挪动即可
    /* 时间复杂度:O(N ^ 2)  最好时间复杂度:O(N)(也就是当数据接近有序的时候排序速度非常快)
       所以一般的场景就是数据基本有序的时候就用 插入排序
    * */
    public void insertSort(int[] arr) {
        for (int i = 1; i < arr.length; i++) {
            int tmp = arr[i];
            int j = i - 1;
            for (; j >= 0; j--) {
                if (tmp < arr[j]) {
                    arr[j + 1] = arr[j];
                } else {
                    arr[j + 1] = tmp;
                    break;
                }
                // 正常情况下,数组中最后一个元素是最小的,此时应该将这个元素放到最前边
                // 但是 j 下标是负数了,此时跳出循环了,所以就应该将tmp的最小值放到 j + 1 下标的位置上
                arr[j + 1] = tmp;
            }
        }
    }


http://lihuaxi.xjx100.cn/news/1529962.html

相关文章

SpringBoot+Vue体育场馆预约管理系统 附带详细运行指导视频

文章目录 一、项目演示二、项目介绍三、运行截图四、主要代码 一、项目演示 项目演示地址&#xff1a; 视频地址 二、项目介绍 项目描述&#xff1a;这是一个基于SpringBootVue框架开发的体育场馆预约管理系统。首先&#xff0c;这是一个前后端分离的项目&#xff0c;代码简…

【系统设计系列】 应用层与微服务

系统设计系列初衷 System Design Primer&#xff1a; 英文文档 GitHub - donnemartin/system-design-primer: Learn how to design large-scale systems. Prep for the system design interview. Includes Anki flashcards. 中文版&#xff1a; https://github.com/donnemart…

【数据结构与算法系列3】有序数组的平方 (C++ Python)

给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字的平方 组成的新数组&#xff0c;要求也按 非递减顺序 排序。 示例 1&#xff1a; 输入&#xff1a;nums [-4,-1,0,3,10] 输出&#xff1a;[0,1,9,16,100] 解释&#xff1a;平方后&#xff0c;数组变为 …

直播 | 丹望医疗王晓林博士“基于微流控的血管化器官/类器官芯片构建及其应用”

类器官模型具有高仿真性&#xff0c;与人体器官有高度相似的组织学特征和功能&#xff0c;尤其在肿瘤模型中能够较好保留肿瘤异质性等优势&#xff0c;在精准医疗及药物筛选等领域具有广泛的应用前景。同时&#xff0c;基于微流控技术的器官芯片能在微流体装置上实现多重微环境…

Maven学习记录

一、Maven是什么 简单来说Maven是一个标准化的java管理和构建工具&#xff0c;它提供了一系列规范&#xff0c;包括项目结构&#xff0c;构建流程&#xff08;编译&#xff0c;测试&#xff0c;打包&#xff0c;发布……&#xff09;&#xff0c;依赖管理等。 标准化就是定下…

【数据库】数据库的一级二级三级封锁协议

背景&#xff1a;秋招做笔试题被问住了&#xff0c;数据库课上没学过这个啊…… 因为笔者也是初学&#xff0c;如果有错误&#xff0c;欢迎发评论批评指正。 数据库的一级、二级、三级封锁协议应该是指适用于当前读的加锁策略。 一级&#xff1a;读不加锁&#xff1b;写加排…

【Linux问题】日期校准

问题 请求阿里云对象存储返回 The difference between the reguest time and the current time is too large. 规定时间和当前时间之间的差异太大。 由于虚拟机出现问题导致服务器时间不准 正常的服务器时间 异常的服务器时间 设置一下时间就好 校准时间 安装 yum insta…

LeetCode刷题笔记【31】:动态规划专题-3(整数拆分、不同的二叉搜索树)

文章目录 前置知识343. 整数拆分题目描述解题思路代码进一步优化 96.不同的二叉搜索树题目描述解题思路代码优化改进 总结 前置知识 参考前文 参考文章&#xff1a; LeetCode刷题笔记【29】&#xff1a;动态规划专题-1&#xff08;斐波那契数、爬楼梯、使用最小花费爬楼梯&…