排序算法之--插入排序

news2024/9/20 20:41:10

文章目录

    • 一、简介
    • 二、算法思路分析
    • 三、算法复杂度分析:
      • 3.1、时间复杂度方面:
      • 3.2、空间复杂度方面:
    • 四、代码实现:

一、简介

        插入排序是一种简单直观的排序算法,‌它的工作原理是通过构建有序序列,‌该算法适用于少量数据的排序。‌在插入排序中,‌每一个元素都会插入到已经排序的序列中,‌通过比较和移动元素来达到排序的目的。‌

二、算法思路分析

        插入排序的关键在于:要理解何为插入,现有一随机数组arr = [4,7,5,3,6],对其进行排序。首先忘掉这是一个数组,扑克牌大家都玩过吧,以扑克牌举例,假设扑克牌的排序从左至右依次变大
第一手: 取到:4,手中就一张牌,结束
第二手: 取到:7,当前手中牌:【4】,对比: 4 < 7 直接4右边,结束
第三手: 取到:5,当前手中牌:【4、7】,对比: 7 > 5,7向右移动一位,给左边留个插牌的位 置,再对比:4 < 5,插到4的右一位。
在这里插入图片描述

第四手: 取到:3,当前手中牌:【4、5、7】,对比:7 > 3,7向右移动一位,给左边留个插牌的位置,再对比:5 》3,5向右移一位(7后移留下的位置),给左边留个插牌的位置,再对比:4>3,4向右移一位,4左边没牌了那就放在最左边。
在这里插入图片描述

第五手: 取到:6,当前手中牌【3、4、5、7】,对比:7 》6, 7向右移动一位,给左边留个插牌的位置,再对比:5 < 6,插到5的右一位。
至此手中的扑克牌变成【3、4、5、6、7】

在这里插入图片描述

三、算法复杂度分析:

3.1、时间复杂度方面:

        最好情况时间复杂度:‌当待排序序列已经是有序时,‌每次插入一个元素只需要进行一次比较即可确定其位置,‌因此最好情况下的时间复杂度为O(n)。‌
        最坏情况时间复杂度:‌当待排序序列是逆序的,‌即每个元素都比前一个元素大,‌这时每次插入一个元素需要进行多次比较才能找到正确的位置,‌最坏情况下的时间复杂度为O(n^2)。‌
        平均情况时间复杂度:‌由于插入排序在最好和最坏情况下的时间复杂度分别对应于序列已有序和序列完全逆序的情况,‌因此在实际应用中,‌其平均时间复杂度也是O(n^2)。‌

3.2、空间复杂度方面:

        插入排序是一种就地排序算法,‌它不需要额外的存储空间来排序数据,‌因此其空间复杂度为O(1)。‌这意味着它在处理数据时不会占用额外的存储空间,‌非常适合处理数据量较小的情况。‌

四、代码实现:

    public static void insertSort(int[] pokerArr) {
        for ( int i = 1; i < pokerArr.length; i++ ) {
            //当前取到的牌
            int newPoker = pokerArr[i];
            int j = i - 1;
            //与手中牌对比,确定插入位置
            while ( j >= 0 && pokerArr[j] > newPoker ) {
                //手中第j张牌 > 当前取的牌 当第j张牌右移一位
                pokerArr[j + 1] = pokerArr[j];
                //再对比左边的牌,直到左边无牌、或者左边牌 < 当前取的牌,结束
                j--;
            }
            //将牌插入最终位置
            pokerArr[j+1] = newPoker;
        }
    }

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

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

相关文章

MySQL:查询(万字超详细版)

&#x1f48e;所属专栏&#xff1a; MySQL &#x1f48e;1. 单表查询 &#x1f48e;1.1 全列查询和指定列查询 全列查询&#xff1a; select * from exam; 在实际开发中不要使用 * 来进行查询&#xff0c;因为数据库会很大&#xff0c;影响效率 指定列查询&#xff1a; se…

低代码开发平台通过钉钉API实现流程管理数据对接

实例背景&#xff1a; CRM项目虽然实现了报价转订单的功能&#xff0c;但是客户还是遇到使用不方便的问题&#xff0c;客户的业务流程中&#xff0c;审核报价的时候是需要提供销售人员与客户的聊天记录截图&#xff0c;这都是在手机上的&#xff0c;电脑操作不方便&#xff0c…

WEB渗透免杀篇-MSF+shellcode免杀

nps_payload >python nps_payload.py正常生成 >msfconsole -r msbuild_nps.rc开启监听 >%windir%\Microsoft.NET\Framework\v4.0.30319\msbuild.exe xx.xml >wmiexec.py <USER>:<PASS><RHOST> cmd.exe /c start %windir%\Microsoft.NET\Framewo…

Python之字符串的函数和方法

字符串的函数和方法 字符串函数字符串方法方法链可选参数方法的嵌套 函数可以看做是执行特定任务的小程序。程序被打包或封装起来&#xff0c;提供给用户使用。**函数可以接受输人值&#xff0c;通过执行语句和判定表达式来完成任务&#xff0c;在完成时可能会返回值。**函数非…

基于STM32开发的智能家居温控系统

目录 引言环境准备工作 硬件准备软件安装与配置系统设计 系统架构硬件连接代码实现 初始化代码控制代码应用场景 家庭智能温控办公室环境监测常见问题及解决方案 常见问题解决方案结论 1. 引言 智能家居温控系统通过整合温度传感器、湿度传感器、风扇和加热器等硬件&#xf…

SQL进阶技巧:断点缝合问题【如何按照业务规则对相邻行数据进行合并】

目录 0 需求描述 1 数据准备 2 数据分析 3 小结 0 需求描述 如下图所示,按照定义的规则进行数据变换 注意:b中的数值只有0和1 1 数据准备 with data as( select 2010 a,0 b union all select 2011 a,1 b union all select 2012 a,0 b union all select 2013 a,1 b un…

吴恩达机器学习-C2W1L3-简单神经网络

在本实验中&#xff0c;我们将使用Numpy构建一个小型神经网络。它将是你在Tensorflow中实现的相同的“咖啡烘焙”网络。 import numpy as np import matplotlib.pyplot as plt plt.style.use(./deeplearning.mplstyle) import tensorflow as tf from lab_utils_common import…

ACL主席:ACL不是AI会议

敲响警钟还是走向封闭&#xff1f; 点击访问我的技术博客https://ai.weoknow.comhttps://ai.weoknow.com 「ACL 不是 AI 会议&#xff08;ACL is not an Al conference&#xff09;」&#xff0c;在泰国曼谷举办的 ACL 2024 上&#xff0c;今年的 ACL 主席 Emily M. Bender 抛出…

实训日记day29

MySQL读写分离 1、读写分离的目的 数据库负载均衡&#xff1a; 当数据库请求增多时&#xff0c;单例数据库不能够满足业务 需求。需要进行数据库实例的扩容。多台数据库同时相 应请求。也就是说需要对数据库的请求&#xff0c;进行负载均衡 但是由于数据库服务特殊原因&#…

读零信任网络:在不可信网络中构建安全系统20攻击者视图

1. 攻击者视图 1.1. IETF要求所有提交的RFC都必须包含“安全风险考虑" 1.1.1. 明确指出了潜在陷阱、危险和警告&#xff0c;这对系统的实现和部署至关重要&#xff0c;有助于运营者确保最终的系统不会偏离设计之初的安全特性 1.1.2. 表明系统设计者对于可能存在的攻击进…

leetcode387. 字符串中的第一个唯一字符,哈希表

leetcode387. 字符串中的第一个唯一字符 给定一个字符串 s &#xff0c;找到 它的第一个不重复的字符&#xff0c;并返回它的索引 。如果不存在&#xff0c;则返回 -1 。 示例 1&#xff1a; 输入: s “leetcode” 输出: 0 示例 2: 输入: s “loveleetcode” 输出: 2 示例…

可能是全网最好用的 5 款免费数据恢复软件

不小心将 USB 中的文件删除了&#xff0c;这个时候要怎么办&#xff1f;首先我们不要保存 USB 磁盘上的任何新数据&#xff0c;否则丢失的数据文件将被覆盖。然后再利用专业的数据恢复工具进行恢复&#xff0c;这里为大家整理了全网最被推荐的5款免费的数据恢复软件。 1.福昕数…

vmware虚拟机玩GPU显卡直通

安装好exsi以后&#xff0c;找到管理----硬件-----PCI设备&#xff0c;勾选想要直通的显卡&#xff0c;然后点击“切换直通” 切换以后可以看到列表中的直通列显示为活动就对了。 然后编辑虚拟机设置&#xff0c;CPU关闭硬件虚拟化&#xff08;向客户机操作系统公开硬件辅助的…

【python】在Windows中定时执行Python脚本的详细用法教学

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

高可用集群keepalived(知识点+实验)详细版

高可用集群KEEPALIVED 一.高可用集群 1.1 集群类型 LB&#xff1a;Load Balance 负载均衡 LVS/HAProxy/nginx&#xff08;http/upstream, stream/upstream&#xff09; HA&#xff1a;High Availability 高可用集群 数据库、Redis SPoF: Single Point of Failure&…

在win10中,安装mingw-get-setup

安装windows下的VSCode软件 Windows下的VSCode安装后&#xff0c;还需要安装gcc编译器和g编译器。 gcc&#xff1a;编译C语言程序的编译器&#xff1b; g&#xff1a;编译C代码的编译器&#xff1b; 1、在Windows下安装VSCode&#xff1b; 2、安装插件有下面几个&#xff1a…

iPhone SE 4可能无法使用Apple Intelligence RAM可能被降级

在设备上运行Apple Intelligence的先决条件是RAM容量和神经引擎的能力。这些要求解释了为什么苹果的生成AI功能套件将首先在iPhone 15 Pro和iPhone 15 Pro Max上可用&#xff0c;因为这两款手机都配备了8GB RAM和A17 Pro。 此前有消息称&#xff0c;iPhone SE 4也将配备相同容…

Stable Diffusion入门:新手必备的几种插件,让小白快速上手(附带地址)

Stable Diffusion是一款强大的AI绘画工具&#xff0c;对于初学者而言&#xff0c;掌握这些模型和插件的使用&#xff0c;是解锁创作潜力、迅速提升技能水平的关键所在&#xff01; 首先我们简单介绍一下插件是什么&#xff1f;如何安装插件&#xff1f; 插件&#xff08;Plug…

VUE最强学习宝典01

目录 1.Vue是什么&#xff1f; 2. 两种使用方法 3.创建第一个vue实例 4.补充小知识 5.错误查询 1.Vue是什么&#xff1f; 概念&#xff1a;动态构建用户界面的渐进式 JavaScript 框架 。 优点&#xff1a;大大提升开发效率(70%) 缺点&#xff1a;需要理解记忆规划-->官…

开学季必备:全能耐用运动耳机推荐!

大家好&#xff01;开学季快到了&#xff0c;我们在学校的生活不仅仅包括课业&#xff0c;还有很多运动和体育项目是不可避免的。运动时&#xff0c;如果没有音乐的陪伴&#xff0c;难免会觉得枯燥乏味。作为一个对运动耳机有较高要求的学生&#xff0c;我最近发现了一款非常值…