【经典排序算法】3. 插入排序

2023-11-11

对顺序性强的数据,插入排序就比较快(最好情况O(n))

代码如下:

public class Main {

    public static void main(String[] args) {
        int[] arr = {3, 3, 5, 6, 2, 1};
        arrPrint(arr);
        InsertSort(arr);
        arrPrint(arr);
    }

    // 插入排序
    // 该算法将遍历数arr[i]之前所有比arr[i]大的数整体右移,腾出的位置放置arr[i]。
    // 只要遍历从左到右遍历数组一遍,即可完成整个排序。
    // 一级for循环从第二个元素开始遍历,索引为i。arr[i]即为待排序元素,
    // 将其保存为temp。之后创建新索引j,将其初始化为j=i,并使其向左遍历数组。
    // 当arr[j - 1]比temp=arr[i]大时,元素直接右移(arr[j]=arr[j-1]),
    // 指针左移一位j--,继续判断。直到arr[j - 1]不比temp=arr[i]大为止。
    // 此时就让temp放置在arr[j]位置,完成一次元素的排序。for循环结束则排序结束。
    private static void InsertSort(int[] arr) {
        int len = arr.length;
        for (int i = 1; i < len; i++) {
            int temp = arr[i];
            int j = i;
            while (j > 0 && arr[j - 1] > temp) {
                arr[j] = arr[j - 1];
                j--;
            }
            if (j != i) {
                arr[j] = temp;
            }
        }
    }

    // 辅助函数:将int[] 打印出来
    private static void arrPrint(int[] arr) {
        StringBuilder str = new StringBuilder();
        str.append("[");
        for (int v : arr) {
            str.append(v + ", ");
        }
        str.delete(str.length() - 2, str.length());
        str.append("]");
        System.out.println(str.toString());
    }
}

实例动画演示如下:

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【经典排序算法】3. 插入排序 的相关文章

随机推荐

  • 解决页面中引用了谷歌字体库访问缓慢的问题

    解决页面中引用了谷歌字体库访问缓慢的问题 这段时间做一个项目的时候遇到了页面访问谷歌字体库加载缓慢的问题 因为引用了别人的页面模板 其中需要使用到谷歌字体也就是 但是为了开发和调试的方便 设置了浏览器禁止缓存 每次刷新页面非常缓慢 从chr
  • java基础详解1----package引入&CLASSPATH

    一 对于公共类 public java源码文件名一定要与类名一致 否则会报错 D project helloWorld gt javac hello java hello java 1 错误 类HelloWorld是公共的 应在名为 Hel
  • Visio 2010 软件:安装即可使用

    安装方法 此文件位Visio 2010 光盘镜像文件 点击打开直接安装 关注下方微信公众号 免费获取海量电子书资源 关注公众号 点击电子书 获取下载链接
  • flutter 修改host文件

    找地址 11 打开 https www ipaddress com 输入访问不了的域名 1 通过网站查网站ip地址 网上有很多网站可以查询网站的ip地址 这里推荐一个好的查询网站ip地址的网站 就是https www wanshangdat
  • extends与implements的使用和区别

    extends 是继承父类 只要那个类不是声明final或者定义为abstract就能继承 JAVA中不支持多重继承 继承只能继承一个类 但implements可以实现多个接口 用逗号分开就行了 比如 class A extends B i
  • datagrid动态更改属性值:如单选多选

    if staffName indexOf sendstaff 0 grid datagrid singleSelect true else grid datagrid singleSelect false
  • VScode User Settings

    1 How to find setting file gt preference gt setting 2 find the settings json 3 pay attention to the character after each
  • Java中通过NetworkInterface获取主机地址和物理地址等

    场景 Networklnterface类表示一个由名称和分配给此接口的IP地址列表组成的网络接口 也 就是Networklnterface类包含网络接口名称与IP地址列表 该类提供访问网卡设备的相关 信息 如可以获取网卡名称 IP地址和子网
  • sar命令

    sar 使用举例 1 输出CPU使用情况的统计信息 2 显示I O和传送速率的统计信息 3 输出内存页面的统计信息 4 输出每秒创建的进程数的进程统计信息 5 输出网络设备状态的统计信息 6 输出网络设备状态的统计信息 查看网络设备故障 7
  • unity前端通过java后端实现短信验证码登录

    一 搭建java后端 1 新建一个springboot项目 初始导入spring boot starter data redis spring boot starter data web lombok依赖 2 进入阿里巴巴短信运营商购买短信
  • 数据结构与算法--树的查找

    树的查找 当用线性表作为表的组织形式时 可以有三种查找法 其中二分查找效率最高 但由于二分查找要求表中结点按关键字有序 且不能用链表作存储结构 因此 当表的插入或删除操作频繁时 为维护表的有序性 势必要移动表中很多结点 这种由移动结点引起的
  • Jmeter系列-控制器Controllers的介绍(8)

    Controllers 简介 JMeter是一款功能强大的性能测试工具 而控制器是JMeter中非常重要的一个组件 控制器用于控制测试计划的执行流程 可以根据需求来控制线程的启动 停止 循环等操作 Jmeter有两种类型的控制器 Sampl
  • JS中setAttribute的使用

    在web开发中 经常会为某个标签设置属性 那么就可以利用js的setAttribute 方法为标签的属性设置值 下面的内容翻译自W3C DOM Level 1中关于setAttribute方法的说明 具体的方法参数如下 object set
  • 如何在MacOS下安装Python3

    对于Python开发者来讲 安装多个版本Python非常常见 原来我写过如何在Linux下安装Python3 今天我们来看下如何在MacOS下安装Python3 mac系统自带python 不过mac系统自带的python版本都是2 x版本
  • css伪类元素实现小圆点效果

    前言 使用伪类元素 before after 来实现 小圆点效果 效果图 实现方式 1 父级元素 postion relative 定位属性 可为absolute 必须 padding left 10px 因为伪类样式一般是在父级附近 根据
  • 2021-08-26

    代码块 地址引用与值引用 python机制的问题 默认地址引用而非值引用 ans append stk 的话 后面修改stk 会使得ans中的值变化 ans stk 1 2 3 ans append stk 此时 ans 1 2 3 stk
  • Pyecharts数据可视化之折线图(阶梯图、平滑曲线图、面积图)、K线图、常用配置项

    安装pyecharts pip install pyecharts U 本次使用jupyter notebook编写代码 折线图 引入相关包 from pyecharts faker import Faker faker数据构造器 from
  • 从创意到实现!GitMind AI一键生成思维导图,让您的灵感瞬间化作可视化成果!

    GitMind AI 一键生成思维导图 提高生产力效率 GitMind AI介绍 作为一款国产思维导图软件 GitMind已经在市场上获得了广泛的认可和使用 它的不断升级和更新也使得它越来越强大和好用 其中 最新推出的GitMind AI更
  • 《实时渲染》

    实时渲染 第四版
  • 【经典排序算法】3. 插入排序

    对顺序性强的数据 插入排序就比较快 最好情况O n 代码如下 public class Main public static void main String args int arr 3 3 5 6 2 1 arrPrint arr In