直接插入排序(Straight Insertion Sort)

news2024/11/28 18:46:07
本文已收录于专栏
《算法合集》

一、简单释义

1、算法概念

  对插入第i个记录时,R1、R2、…、Ri-1均已排好顺序。因此,将第i个记录Ri-1、…、R2、R1进行比较,找到合适的位置插入,他简单明了但是速度很慢。

2、算法目的

  把无序数组通过彼此之间比较进行移动形成一个有序数组

3、算法思想

  将一个记录插入到已经排好序的有序表中,从而一个新的并且记录数增1的有序表。

二、核心思想

  1. –已经排序好的有序表;
  2. –有序表插入一个新的记录,形成一个新的有序表;

三、图形展示

在这里插入图片描述

  1、第一次排序:首先2和8进行比较,8比2大所以不交换位置。
  2、第二次排序:首先1和8进行比较,1比8小所以交换位置,然后1和2进行比较,1比2小交换位置。
  3、第三次排序:首先4和8进行比较,4比8小所以交换位置,然后4和2进行比较,4比2大不交换位置,最后4和1进行比较,4比1大不交换位置。
  4、第四次排序:首先9和8进行比较,9比8大所以不交换位置,后面以此类推。

四、代码实现

/**
 * @BelongsProject: demo
 * @BelongsPackage: com.wzl.Algorithm.Partition
 * @Author: Wuzilong
 * @Description: 直接插入排序
 * @CreateTime: 2023-04-26 09:27
 * @Version: 1.0
 */

public class InsertionSort {
    public static void insertionSort(int[] num){
        for (int i =1; i<num.length;i++){
            if (num[i]<num[i-1]){
                int temp=num[i];
                for (int j=i; j>=0;j--){
                    if (j>0&&num[j-1]>temp){
                        num[j]=num[j-1];
                    }else{
                        num[j]=temp;
                        break;
                    }
                }
            }
            System.out.println(Arrays.toString(num));
        }

    }


    public static void main(String[] args) {
        int[] num={2,8,1,4,9,5,7};
        insertionSort(num);
    }

运行结果
在这里插入图片描述

五、算法描述

1、问题描述

  每一步将一个待排序的元素,按其排序码的大小,插入到前面已经排好序的一组元素的适当位置上去,直到元素全部插入为止

2、算法过程

整个算法过程分为以下几步:
  1)每次从无序表中取出第一个元素,把它插入到有序表的合适位置,使有序表仍然有序。
  2)第一趟比较前两个数,然后把第二个数按大小插入到有序表中。
  3)第二趟把第三个数据与前两个数从后向前比较,把第三个数按大小插入到有序表中。
  4)依次进行下去,进行了(n-1)趟比较以后就完成了整个排序过程。

3、算法总结

  直接插入排序是由两层嵌套循环组成的。外层循环标识并决定待比较的数值。内层循环为待比较数值确定其最终位置。直接插入排序将待比较的数值与它的前一个数值进行比较,所以外层循环是从第二个数值开始的。当前一数值比待比较数值大的情况下继续循环比较,直到找到比待比较数值小的并将待比较数值置入其后一位置,结束该次循环。

六、算法分析

1、时间复杂度

  首先直接插入排序是一个稳定的排序算法;最好的情况下,也就是排序本身是有序的,共需比较n-1次,因为没有移动的记录,时间复杂度为O(n)。最坏的情况下,即排序表是逆序的情况,时间复杂为O(n²)。

2、空间复杂度

  算法的空间复杂度并不是计算实际占用的空间,而是计算整个算法的辅助空间单元的个数。在直接插入排序中只使用了i,j,temp这三个辅助空间单元,所以空间复杂度是O(1)。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

windows下免费本地部署类ChatGpt的国产ChatGLM-6B

ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型&#xff0c;基于 General Language Model (GLM) 架构&#xff0c;具有 62 亿参数。结合模型量化技术&#xff0c;用户可以在消费级的显卡上进行本地部署&#xff08;INT4 量化级别下最低只需 6GB 显存&#xff09;。 Chat…

禁止右键禁止复制禁止选择网页内容的CSS和JS代码(支持PC和移动端)

禁止右键禁止复制禁止选择网页内容的CSS和JS代码&#xff08;支持PC和移动端&#xff09;&#xff0c;收藏吧&#xff0c;用得上。 body {-moz-user-select: none;/* Firefox私有属性 */-webkit-user-select: none;/* WebKit内核私有属性 */-ms-user-select: none;/* IE私有属…

项目1登录功能优化(中间件添加操作信息,统一日志输出)

中间件添加操作信息 context增加属性userid用于储存访问者id,便于后期使用中间件添加操作信息 type Context struct { //......,context其他属性 Userid int} 对于添加操作信息的中间件函数 // 添加用户操作中间件func Addoperationmid(db *sql.DB) gee7.HandlerFunc { retu…

SpringBoot【运维实用篇】---- 多环境开发

SpringBoot【运维实用篇】---- 多环境开发 1. 多环境开发&#xff08;yaml单一文件版&#xff09;2. 多环境开发&#xff08;yaml多文件版&#xff09;3. 多环境开发&#xff08;properties多文件版&#xff09;4. 多环境开发独立配置文件书写技巧5. 多环境开发控制 讲的内容距…

【LeetCode】1000题挑战(220/1000)

1000题挑战 没有废话&#xff0c;直接开刷&#xff01; 目录 1000题挑战 没有废话&#xff0c;直接开刷&#xff01; 第一题&#xff1a;119. 杨辉三角 II - 力扣&#xff08;Leetcode&#xff09; 题目接口 解题思路 代码&#xff1a; 过过过过啦&#xff01;&#x…

【Python】【进阶篇】13、Django安装与配置教程

目录 Django安装与配置教程1. Windows系统安装Django1) 离线安装2) 在线安装3) 配置Django环境变量4) 检查是否安装成功 2. Linux和Mac系统安装Django1) 使用终端在线安装2) 下载安装包离线安装 Django安装与配置教程 本节主要对 Django 在各个平台上的安装方式与配置进行讲解…

Blender 插件UvSquares

目录 1. UvSquares插件1.1 解压UvSquares插件1.2 blender偏好设置1.3 打开插件1.4 安装插件1.5 勾选插件UvSquares1.6 安装UvSquares插件前1.7 安装UvSquares插件后 1. UvSquares插件 Blender 的 UV 编辑器工具&#xff0c;可将 UV 选择重塑为网格。 下载&#xff1a;https:/…

关于jsonp的理解。利用 百度“联想搜索”接口

什么是 回调函数&#xff1f; 在 JavaScript 中&#xff0c;回调函数是指将一个函数作为参数传递给另一个函数&#xff0c;以在某些操作完成后通知调用者。当操作完成时&#xff0c;被调用的函数&#xff08;即回调函数&#xff09;将被调用&#xff0c;以执行某些指定的操作或…

Ajax的简单使用

目录 1、ajax概述 2、模拟ajax 3、Jquery实现ajax &#xff08;1&#xff09;通用开发步骤 &#xff08;2&#xff09;示例 注册用户名重复性验证 &#xff08;3&#xff09;示例 ajax解析json数据 &#xff08;4&#xff09;实现细节 4、axios实现ajax 5、ajax发送PUT…

西门子安装和配置

一、已安装 V16&#xff0c;检查软件正常 1.判断西门子软件是否正常工作&#xff0c;检查软件图标&#xff0c;如下图。 2.如果软件图标不存在&#xff0c;检查Windows服务是否存在&#xff0c;打开方法如下图&#xff1a; 3.检查西门子的服务&#xff0c;共16个服务&#xff…

万维网服务

~ 在AppSrv上搭建网站服务器 ~ 将访问HTTP://www.chinaskills.com的http的请求重定向到https://chinaskills.com站点 ~ 网站内容设置为“该页面为www.chinaskills.com测试页” ~ 将当前web根目录设置为d:\wwwroot 目录 ~ 启用windows身份验证&#xff0c;只有通过身份验证的…

如何在比特币系统内创造人工生命

信息来源&#xff1a;coingeek.com 自2015年以来&#xff0c;关于比特币能否进行复杂计算以及比特币是否“图灵完备”的争论一直在持续。不幸的是&#xff0c;现在存在着一种流传甚广的谬论&#xff0c;有人说比特币并非图灵完备的&#xff0c;它不能像以太坊区块链那样进行复杂…

【Node.JS 数据库篇】Sequelize 的用法与mysql的关系

文章目录 一、Sequlize是Node.JS中ORM实现二、Sequelize 执行基础的CRUD三、Sequelize 执行复杂的CRUD1. 指定字段attributes2. 触发数据库事务3. LEFT JOIN 联表关系4. INNER JOIN 联表关系5. 嵌套查询 四、Sequlize常用方法和参数1. findAll2. count3. findByPk4. findOne5. …

【策略设计模式详解】C/Java/JS/Go/Python/TS不同语言实现

简介 策略模式&#xff08;Strategy Pattern&#xff09;属于行为型设计模式。将每一个算法封装到具有共同接口的独立类中&#xff0c;根据需要来绑定策略&#xff0c;使得具体实现和策略解耦。 当你想使用对象中各种不同的算法变体&#xff0c;使用if...else 所带来的复杂和…

增强型PID-自适应-前馈-神经网络控制研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【Linux】入门介绍

&#x1f331;博客主页&#xff1a;大寄一场. &#x1f331;系列专栏&#xff1a;Linux &#x1f618;博客制作不易欢迎各位&#x1f44d;点赞⭐收藏➕关注​ 目录 前言 Linux背景介绍 1.发展史 UNIX发展的历史 Linux发展历史 2. 开源 3. 官网 4. 企业应用现状 5. 发行版…

装饰者模式

采用组合而非继承的手法&#xff0c;Decorator模式实现了在运行时动态扩展对象功能的能力&#xff0c;可以根据需要扩展功能。 Decorator类在接口上表现为is-a Component的继承关系&#xff0c;即Decorator类继承了Component类的所有接口。但在实现上又表现为has-a Component的…

打印流~~

文章目录 打印流PrintStreamPrintWriter追加操作输出语句的重定向 Properties使用properties把键值对信息存入到属性文件中去使用properties在文件中取键值对信息 IO框架(了解) 打印流 作用&#xff1a;打印流可以实现方便、高效的打印数据到文件中去。打印流一般是指&#xff…

【Linux】2.1 环境基础开发工具使用——yum

什么是yum Linux 软件包管理器——yum yum(Yellow dog Updater, Modified)是Linux下非常常用的一种包管理器. 主要应用在Fedora, RedHat, Centos等发行版上. yum 的使用 卸载&#xff1a; yum -y(直接卸载) remove [xxx] 查找&#xff1a; yum list | grep [xxx] 软件包名称:…

这才是 SpringBoot 统一登录鉴权、异常处理、数据格式 的正确姿势

本篇将要学习 Spring Boot 统一功能处理模块&#xff0c;这也是 AOP 的实战环节 用户登录权限的校验实现接口 HandlerInterceptor WebMvcConfigurer 异常处理使用注解 RestControllerAdvice ExceptionHandler 数据格式返回使用注解 ControllerAdvice 并且实现接口 Response…