【算法】直接插入排序

目录

          • 1. 说明
          • 2. 举个例子
          • 3. java代码示例
          • 4. java示例截图

1. 说明
  • 1.直接插入排序的方式和打牌一样,刚开始数组为空
  • 2.拿到一个数字后从左到右将它与数组中的每一个数字进行比较,然后插入合适的位置
  • 3.到最后,数组按照既定的顺序排序好
2. 举个例子
  • 示例: [5, 3, 4, 1, 2]
  • 1. 获取数组的长度5,从第二个数开始循环操作
  • 2. 取下一个比较的值3,索引i为1,上一个索引j为0
  • 3.判断5是否大于3,则索引为1的数字改为5,得到 [5, 5, 4, 1, 2],j=j-1=-1,j<0跳出循环
  • 4.将索引0的位置的数字改为3,得到[3, 5, 4, 1, 2]
  • 5. 取下一个比较的值4,索引i为2,上一个索引j为1 (索引0到索引j都是有序的)
  • 6. 比较索引1位置的数字,5大于4,将索引2位置的数字改为5(往后挪一位),得到[3, 5, 5, 1, 2],j=j-1=0
  • 7. 比较索引0位置的数字,3小于4,跳出循环
  • 8. 将索引1位置的数字改为4,得到[3, 4, 5, 1, 2]
  • 9. 取下一个比较的值1,索引i为3,上一个索引j为2 (索引0到索引j都是有序的)
  • 10. 比较索引2位置的数字,5大于1,将索引3位置的数字改为5(往后挪一位),得到[3, 4, 5, 5, 2],j=j-1=1
  • 11. 比较索引1位置的数字,4大于1,将索引2位置的数字改为4(往后挪一位),得到[3, 4, 4, 5, 2],j=j-1=0
  • 12. 比较索引0位置的数字,3大于1,将索引1位置的数字改为3(往后挪一位),得到[3, 3, 4, 5, 2],j=j-1=-1,j<0跳出循环
  • 13. 将索引0位置的数字改为1,得到[1, 3, 4, 5, 2]
  • 14. 取下一个比较的值2,索引i为4,上一个索引j为3(索引0到索引j都是有序的)
  • 15. 比较索引3位置的数字,5大于2,将索引4位置的数字改为5(往后挪一位),得到[1, 3, 4, 5, 5],j=j-1=2
  • 16. 比较索引2位置的数字,4大于2,将索引3位置的数字改为4(往后挪一位),得到[1, 3, 4, 4, 5],j=j-1=1
  • 17. 比较索引1位置的数字,3大于2,将索引2位置的数字改为3(往后挪一位),得到[1, 3, 3, 4, 5],j=j-1=0
  • 18. 比较索引0位置的数字,1小于2,跳出循环
  • 19. 将索引1位置的数字改为2,得到[1, 2, 3, 4, 5]
3. java代码示例
package com.learning.algorithm.sort;

/**
 * 直接插入排序
 * 示例: 5, 3, 4, 1, 2
 * 1.获取数组的长度5,从第二个数开始循环操作
 * ===开始循环===
 * 2.取下一个比较的值3,索引i为1,上一个索引j为0
 * 3.判断5是否大于3,则索引为1的数字改为5,得到 [5, 5, 4, 1, 2],j=j-1=-1,j<0跳出循环
 * 4.将索引0的位置的数字改为3,得到[3, 5, 4, 1, 2]
 * ===继续循环===
 * 5.取下一个比较的值4,索引i为2,上一个索引j为1 (索引0到索引j都是有序的)
 * 6.比较索引1位置的数字,5大于4,将索引2位置的数字改为5(往后挪一位),得到[3, 5, 5, 1, 2],j=j-1=0
 * 7.比较索引0位置的数字,3小于4,跳出循环
 * 8.将索引1位置的数字改为4,得到[3, 4, 5, 1, 2]
 * ===继续循环===
 * 9.取下一个比较的值1,索引i为3,上一个索引j为2 (索引0到索引j都是有序的)
 * 10.比较索引2位置的数字,5大于1,将索引3位置的数字改为5(往后挪一位),得到[3, 4, 5, 5, 2],j=j-1=1
 * 11.比较索引1位置的数字,4大于1,将索引2位置的数字改为4(往后挪一位),得到[3, 4, 4, 5, 2],j=j-1=0
 * 12.比较索引0位置的数字,3大于1,将索引1位置的数字改为3(往后挪一位),得到[3, 3, 4, 5, 2],j=j-1=-1,j<0跳出循环
 * 13.将索引0位置的数字改为1,得到[1, 3, 4, 5, 2]
 * ===继续循环===
 * 14.取下一个比较的值2,索引i为4,上一个索引j为3(索引0到索引j都是有序的)
 * 15.比较索引3位置的数字,5大于2,将索引4位置的数字改为5(往后挪一位),得到[1, 3, 4, 5, 5],j=j-1=2
 * 16.比较索引2位置的数字,4大于2,将索引3位置的数字改为4(往后挪一位),得到[1, 3, 4, 4, 5],j=j-1=1
 * 17.比较索引1位置的数字,3大于2,将索引2位置的数字改为3(往后挪一位),得到[1, 3, 3, 4, 5],j=j-1=0
 * 18.比较索引0位置的数字,1小于2,跳出循环
 * 19.将索引1位置的数字改为2,得到[1, 2, 3, 4, 5]
 */
public class DirectInsertSort {
    public static void sort(int array[]) {
        // 获取数组的长度
        int length = array.length;
        // 从第二位开始比较
        for (int i = 1; i < length; ++i) {
            // 获取下一个比较的值
            int key = array[i];
            // 上一个索引
            int j = i - 1;

            // 比较到索引大于等于0的 且 遍历前面的值 与 key比较大小,如果比key大,大的值往后挪一位
            while (j >= 0 && array[j] > key) {
                // 比key大的值往后挪一位
                array[j + 1] = array[j];
                // 继续比较前面的值和key的大小
                j = j - 1;
            }
            // 当array[j]比key小,则array[j+1]的数字改为key
            array[j + 1] = key;
        }
    }

    /* A utility function to print array of size n*/
    public static void print(int[] array) {
        for (int i : array) {
            System.out.print(i + " ");
        }
    }

    public static void main(String args[]) {
        int array[] = {5, 3, 4, 1, 2};
        DirectInsertSort.sort(array);
        DirectInsertSort.print(array);
    }
}
4. java示例截图

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/213084.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录算法训练营第五十三天【动态规划part14】 | 1143.最长公共子序列、1035.不相交的线、53. 最大子序和

1143.最长公共子序列 题目链接 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 求解思路 动规五部曲 1.确定dp数组及其下标含义&#xff1a; dp[i][j]&#xff1a;长度为[0, i - 1]的字符串text1与长度为[0, j - 1]的字符串text2的最长公共子序…

Tensorflow的日志log记录

if OUTPUT_GRAPH:tf.summary.FileWriter("logs/", sess.graph)自动创建文件夹log

GEE:Sobel算子卷积和Roberts算子卷积对比

作者:CSDN @ _养乐多_ 本文介绍了Sobel算子卷积和Roberts算子卷积操作的代码,并进行了图像对比,可以观察到两个算子的细微差异。 文章目录 一、Sobel算子和Roberts算子对比二、完整代码三、代码链接一、Sobel算子和Roberts算子对比 详细介绍介绍参考《遥感数字图像处理教程…

基于搜索协议实现工业设备升级

目录 1、背景引入 2、技术分析 3、过程概述 4、服务器端流程 5、客户端流程 6、效果展示 7、源码 7.1 master&#xff08;主控&#xff09; 7.2 device&#xff08;设备&#xff09; 8、注意事项 1、背景引入 在工业生产中&#xff0c;设备的升级和维护是非常重要的…

Gossip 协议

Gossip 协议 背景 在分布式系统中&#xff0c;不同的节点进行数据/信息共享是一个基本的需求。 一种比较简单粗暴的方法就是 集中式发散消息&#xff0c;简单来说就是一个主节点同时共享最新信息给其他所有节点&#xff0c;比较适合中心化系统。这种方法的缺陷也很明显&…

GOLAND搭建GIN框架以及基础框架搭建

创建GO环境文件夹 终端输入安装GIN go get -u github.com/gin-gonic/gin如果遇到超时错误 package golang.org/x/net/html: unrecognized import path "golang.org/x/net/html": https fetch: Get "https://golang.org/x/net/html?go-get1": dial tcp …

理解宏任务和微任务:JavaScript 异步编程的必备知识(上)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

借助SD地图的BEV静态感知

动机与出发点 纯视觉、视觉Lidar的感知系统在复杂城市道路场景下并不能如预期那般表现稳定&#xff0c;其中遮挡就是一个巨大挑战。现在的BEV静态感知方案多采用多趟重建的方式获取&#xff0c;这就导致无论前方是否有车辆、建筑物、绿化带等&#xff0c;只要能投影到BEV空间的…

1688买家API接口跨境卖家需要的API接口

1688作为深耕产业带多年的数字供应链平台&#xff0c;近两年不仅在年轻消费群体中热度飙升&#xff0c;在跨境侧也有不俗表现。 11月19日&#xff0c;1688总裁余涌在1688跨境寻源通计划发布会上透露&#xff0c;1688平台拥有100万的源头厂商&#xff0c;每年服务6500万的B类买…

【JavaEE】多线程(3) -- 线程等待 wait 和 notify

目录 1. wait()⽅法 2. notify()⽅法 3. notifyAll()⽅法 4. wait 和 sleep 的对⽐&#xff08;⾯试题&#xff09; 由于线程之间是抢占式执⾏的, 因此线程之间执⾏的先后顺序难以预知. 但是实际开发中有时候我们希望合理的协调多个线程之间的执⾏先后顺序. 完成这个协调⼯…

树莓派4B机器狗的串口通信驱动库pyserial实践

pyserial是一个串口通信驱动库&#xff0c;常用的Windows、Linux、MacOS等都可以安装&#xff0c;这里我使用的是树莓派4B来测试&#xff0c;这块板子还是很强大的&#xff0c;我们可以通过pyserial这个库来操作基于这块板子上的机器狗之类的设备。 1、四足机器狗 本人的是四…

初识Java 18-6 泛型

目录 潜在类型机制 支持潜在类型机制的语言 Python的潜在类型机制 C的潜在类型机制 Java中的直接潜在类型机制 潜在类型机制的替代方案 反射 将方法应用于序列中的每个元素 Java 8的潜在类型机制&#xff08;间接实现&#xff09; 潜在类型机制的使用例&#xff08;S…

条款2:不要滥用宏

文章目录 优先选择编译器而不是预编译器两种特殊情况使用宏替代函数调用总结 优先选择编译器而不是预编译器 假设我们预定义了一个宏#define ASPECT_RATIO 1.653&#xff0c;当我们的程序在这个地方出现错误的时候。可能会出现以下的问题&#xff1a; 符号名称ASPECT_RATIO可能…

MQTT客户端、代理(broker)和连接建立

在前篇文章&#xff08;http://t.csdnimg.cn/IamPz&#xff09;中&#xff0c;介绍了发布/订阅架构和MQTT如何据此交换信息&#xff0c;其中的关键概念是&#xff1a; 发布/订阅架构触耦了负责发布信息的客户端&#xff08;发布者&#xff09;和负责接收信息的客户端&#xff…

C语言-联合和枚举

------------------------------------ --------------- ------ 最慢的步伐不是跬步&#xff0c;而是徘徊&#xff1b; 最快的脚步不是冲刺&#xff0c;而是坚持。 今天来到我们的联合和枚举类型的讲解&#xff1a; 目录 联合体类型 联合体类型的声明 联合体类型的特点 …

Wireshark抓包分析RTMP协议时,出现Unknown问题

进行rtmp推流时&#xff0c;使用wireshark抓包&#xff0c;发现部分包显示Unknown 解决方法&#xff1a; 编辑 -> 首选项 -> Protocols -> RTMPT&#xff0c;这里Maximum packet size默认是32768 将该值调大&#xff0c;比如调成1048576&#xff0c;即可解决该问题。…

ChatGPT 的 18 种玩法,你还不会用吗?

你确定&#xff0c;你会使用 ChatGPT 了吗&#xff1f; 今天给大家整理了 18 种 ChatGPT 的用法&#xff0c;看看有哪些方法是你能得上的。 用之前我们可以打开R5Ai平台&#xff0c;可以免费使用目前所有的大模型 地址&#xff1a;R5Ai.com 语法更正 用途&#xff1a;文章…

改进LiteOS中物理内存分配算法(详细实验步骤+相关源码解读)

一、实验要求 优化TLSF算法&#xff0c;将Best-fit策略优化为Good-fit策略&#xff0c;进一步降低时间复杂度至O(1)。 优化思路&#xff1a; 1.初始化时预先为每个索引中的内存块挂上若干空闲块&#xff0c;在实际分配时避免分割&#xff08;split&#xff09;操作&#xff…

[原创]C++98升级到C++20的复习旅途-从汇编及逆向角度去分析“constexpr“关键字

[简介] 常用网名: 猪头三 出生日期: 1981.XX.XXQQ: 643439947 个人网站: 80x86汇编小站 https://www.x86asm.org 编程生涯: 2001年~至今[共22年] 职业生涯: 20年 开发语言: C/C、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python 开发工具: Visual Studio、Delphi…

AtCoder Beginner Contest 331 题解 A-E

目录 A - TomorrowB - Buy One Carton of MilkC - Sum of Numbers Greater Than MeD - Tile PatternE - Set Meal A - Tomorrow 原题链接 题目描述 已知一年有M个月D天&#xff0c;求出第y年m月d天的后一天是哪一天。 思路&#xff1a;分类讨论 分别讨论m和d的是否是最后一个月…