【算法】插入排序

article/2025/6/20 9:08:08

算法系列五:插入排序

一、直接插入排序

1.原理

2.实现

3.性质

3.1时间复杂度

3.2空间复杂度

3.3稳定性

二、希尔排序

1.原理

1.1优化方向

1.2优化原理 

2.设计

2.1比较无序时

2.2比较有序时

3.实现

4.性质

4.1时间复杂度

4.2空间复杂度

4.3稳定性


解放变量

多变量存储数据可实现其中的变量被解放了可去不失数据覆盖存别的值被解放变量覆盖存别的值又是从变量里来的又能再解放出下一对数据解放传递着能实现数据在变量间的调整交换位置存放,实现排序的基础


一、直接插入排序

1.原理

插排就是要排的数据举着往前面维护着的有序数列解放交换数据的模式下找到它大小的位置解放安全地覆盖放入从前往后一个个插入排好序进去,维护成的有序数列从前往后越来越大,直到把所有数据都插入维护进去,插排排序就完成了


2.实现

public static void insertSort(int[] array) {for (int i = 1; i < array.length; i++) {int tmp = array[i];int j = i-1;for (; j >= 0 ; j--) {if(array[j] > tmp) {array[j+1] = array[j];}else {break;}}array[j+1] = tmp;}}

3.性质

3.1时间复杂度

首先第一个元素 去维护进有序数列时,它一进去只有它一个 一定就直接有序了 不需要维护成有序从第二个元素起,每个元素都要举着 往有序数列前 找它大小的解放位置放n个元素 一共要去往前检查维护n-1次

  • 完全有序的情况下,每次里面的for循环一进去执行就break,时间复杂度为O(n)
  • 完全逆序的情况下,每个数据维护进当前有序数组 都要遍历比较到有序数组末尾,执行次数为 1~n-1递增的等差数列和次数,时间复杂度为O(n^2)

3.2空间复杂度

O(1)


3.3稳定性

稳定


二、希尔排序

希尔排序是直接插入排序的优化版

1.原理

1.1优化方向

直接插入排序中,因为n个元素要去检查维护n-1次是固定变不了的,要优化就只能从尽可能减少每次的检测维护里往前检查搜寻次数、交换次数来实现


1.2优化原理 

待对它插排的整体数组越有序即数组里面每个数据最开始离它们各自的最终排序位置都越近,那么n-1次每个元素对待的前面已排好序的数组就会都是兼容性顺序很好很接近它们在当前数组的排序位置且也是最终整体数组相对排序的位置

每个元素去维护数组时经常都是没检查搜寻几次交换几次就到达了当前维护数组的排序位置就break了且该位置也是最终整体排好序数组的相对位置说明数据先后进来维护都自然地从前往后排的不怎么需要往前检查移动交换因为它们这些数据本身就很接近最终数组排序位置,排序时按顺序从前往后进来维护它们也是进来就直接处在要排的位置上了,按顺序来直接到直接是最终位置


2.设计

2.1比较无序时

比较无序时,每次维护里连续重复地进前面有序数组维护交换次数会很多不靠近最终整体数组有序位置,所以:

无序时大跨越式地横跨取数进维护有序组,会发现最终维护的组会很多因为跨数太大了它们无法前后续上,所以它们的比较不是很会连续重复进行,且它们的交换跨度很大,能用一次少的比较成本实现数据的大幅度交换小成本实现数据的大致整体左小右大排列


2.2比较有序时

无序时的大跨越式横跨小成本实现整体数组大致左小右大比较有点序后

跨越式取数的gap适当变小缩为原来的一半,因为此时面对的是较有点序的整体数组,我们的排序就以它更有点序下对应用到它有点序的程度来深入,一路上全合适的程度全效地利用着它的渐有序进行排列到后面随着数组越来越有序,分的组越来越少,精确程度地深入去排已经很有序的数据高效地全完成


3.实现

public static void shellSort(int[] array) {int gap = array.length;while (gap > 1) {gap /= 2;shell(array,gap);}}private static void shell(int[] array,int gap) {for (int i = gap; i < array.length; i++) {int tmp = array[i];int j = i-gap;for (; j >= 0 ; j-=gap) {if(array[j] > tmp) {array[j+gap] = array[j];}else {break;}}array[j+gap] = tmp;}}


4.性质

4.1时间复杂度

O(n^1.3)


4.2空间复杂度

O(1)


4.3稳定性

不稳定


http://www.hkcw.cn/article/XqVqntaoEW.shtml

相关文章

【javaSE】String类(1)

❤️❤️前言~🥳🎉🎉🎉 hellohello~,大家好💕💕,这里是E绵绵呀✋✋ ,如果觉得这篇文章还不错的话还请点赞❤️❤️收藏💞 💞 关注💥💥,如果发现这篇文章有问题的话,欢迎各位评论留言指正,大家一起加油!一起chin up!👍👍 💥个人主页:E绵绵…

使用 Java 实现一个简单且高效的任务调度框架

目录 一、任务调度系统概述 (一)任务调度的目标 (二)任务调度框架的关键组成 二、任务状态设计 (一)任务状态流转设计 (二)任务表设计(SQL) 三、单机任务调度实现 (一)获取待处理任务 (二)执行任务 代码实现(单线程版本) (三)多线程提高吞吐量 四…

【算法题】别再为 Java 算法题犯难,码蹄杯上这些新手题库帮你打好基础

我的个人主页 我的专栏&#xff1a; 人工智能领域、java-数据结构、Javase、C语言&#xff0c;MySQL&#xff0c;希望能帮助到大家&#xff01;&#xff01;&#xff01; 点赞&#x1f44d;收藏❤ 前言&#xff1a; 码蹄杯作为编程学习中经典的逻辑训练题型&#xff0c;是提升算…

【Java开发日记】6个Java 工具,轻松分析定位 JVM 问题 !

目录 使用 JDK 自带工具查看 JVM 情况 jps jinfo jvisualvm jcm 使用 JDK 自带工具查看 JVM 情况 JDK 自带了很多命令行甚至是图形界面工具&#xff0c;帮助查看 JVM 的一些信息。比如&#xff0c;在机器上运行 ls 命令&#xff0c;可以看到 JDK 8 提供了非常多的工具或程…

Java 大视界 -- 基于 Java 的大数据分布式文件系统在数字图书馆海量文献存储与管理中的应用优化(219)

💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也期待你毫无保留地分享独特见解,愿我们于此携手成长,共赴新程!💖 全网…

寒假学习笔记【匠心制作,图文并茂】——1.20拓扑、强连通分量、缩点

文章目录 前言拓扑排序拓扑排序是怎么运作的拓扑排序的好处 强连通分量强连通是什么强连通分量是什么如何求 SCC 缩点 前言 更新的稍微有点晚…… 因为强连通分量这一块难学且知识点多&#xff0c;学习时间久了亿点&#xff0c;所以直到现在才更新。 拓扑排序 OI-Wiki 是这…

git下载和安装(完整版)

目录 一&#xff0c;官网下载 二, 安装步骤 1 双击直接安装【版本为64位系统的】 2 点击Next 3 点击Finish完成安装&#xff0c;验证安装&#xff0c;找一个桌面空白处&#xff0c;右键出现下列窗口 4 检验是否成功 一&#xff0c;官网下载 git官网地址&#xff1a;Gi…

系统思考:化繁为简的艺术

系统思考&#xff0c;其实是一门化繁为简的艺术。当我们能够把复杂的问题拆解成清晰的核心以及更加简单&#xff0c;从而提升团队的思考品质和行动品质&#xff0c;发挥最大的合力。 每个公司都想在某方面成为最优秀的&#xff0c;但是实际上具有穿透性的洞察力和摆脱虚荣心的清…

【Kotlin】简介变量类接口

【Kotlin】简介&变量&类&接口 【Kotlin】数字&字符串&数组&集合 文章目录 Kotlin_简介&变量&类&接口Kotlin的特性Kotlin优势创建Kotlin项目变量变量保存了指向对象的引用优先使用val来避免副作用 编译期常量后端变量Backing Fields后端属性…

8086 处理器 Flags 标志位全解析:CPU 的 “晴雨表” 与 “遥控器”总结:

引入&#xff1a; 你是否好奇&#xff0c;当 CPU 执行一条加法指令时&#xff0c;如何自动判断结果是否超出范围&#xff1f;当程序跳转时&#xff0c;如何快速决定走哪条分支&#xff1f;甚至在调试程序时&#xff0c;为何能让 CPU “一步一停”&#xff1f;这一切的答案&…

uniapp uni-id Error: Invalid password secret

common文件夹下uni-config-center文件夹下新建uni-id,新建config.json文件 复制粘贴以下代码&#xff0c;不要自己改&#xff0c;格式容易错 {"passwordSecret": [{"type": "hmac-sha256","version": 1}], "passwordStrength&qu…

从0到1上手Trae:开启AI编程新时代

摘要&#xff1a;字节跳动 2025 年 1 月 19 日发布的 Trae 是一款 AI 原生集成开发环境工具&#xff0c;3 月 3 日国内版推出。它具备 AI 问答、代码自动补全、基于 Agent 编程等功能&#xff0c;能自动化开发任务&#xff0c;实现端到端开发。核心功能包括智能代码生成与补全、…

云计算和服务器

一、云计算概述 ICT是世界电信协会在2001年的全球性会议上提出的综合性概念&#xff0c;ICT分为IT和CT&#xff0c;IT(information technology)信息技术&#xff0c;负责对数据生命周期的管理&#xff1b;CT(communication technology)&#xff0c;负责数据的传输管理。 CT技术…

云计算与分布式系统:从零开始构建!

🏆本文收录于「编程与技术实战」专栏,此专栏涵盖了C/C++编程、人工智能、数据结构、机器学习等技术领域的内容,助你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!! 本文目录: 前言云计算概念与架构什么是云计算?…

零基础入门haproxy七层代理

文章目录 haproxy的安装和服务信息global配置proxies配置defaults配置frontend配置backed配置listen配置 socat工具 haproxy算法静态算法动态算法其他算法 高级功能及配置案例基于cookie会话保持HAProxy状态页IP透传四层IP透传七层IP透传 ACL匹配规范基于HTTP请求头部的匹配精确…

清华大学杨诚最新Nature子刊

研究背景 电致变色&#xff08;Electrochromic, EC&#xff09;器件作为一种新兴的节能和调光技术&#xff0c;展示了动态调节光和热透射率的能力&#xff0c;是未来智能建筑、智能汽车天窗以及智能可穿戴设备的重要技术组成。然而&#xff0c;传统的EC器件的商业化面临着诸如…

【课程笔记】华为 HCIP-Cloud Computing 云计算08:OpenStack网络管理

OpenStack网络管理 目录 OpenStack网络管理 一、Linux网络虚拟化基础 二、Neutron简介 三、Neutron概念 四、Neutron架构 五、Neutron典型操作及流程 六、Neutron网络流量分析 一、Linux网络虚拟化基础 Linux下的网络虚拟化本质就是将原本物理网络中的网卡、物理虚拟机…

使用异步编程模型结合资源预测算法优化云计算环境下的任务调度与能耗管理技术详解

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 使用异步编程模型结合资源预测算法优化云计算环境下的任务调度与能耗管理技术详解 使用异步编程模型结合资源预测算法优化云计算…

云计算——云计算关键技术

作者简介&#xff1a;一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​ 目录 前言 一.云计算关键技术 1.虚拟化技术 2.分布式数据存储技术 &#xff08;1&…

2024广东省职业技能大赛云计算——私有云(OpenStack)平台搭建

OpenStack搭建 前言 搭建采用双节点安装&#xff0c;即controller控制节点和compute计算节点。 CentOS7 系统选择 2009 版本&#xff1a;CentOS-7-x86_64-DVD-2009.iso 可从阿里镜像站下载&#xff1a;https://mirrors.aliyun.com/centos/7/isos/x86_64/ OpenStack使用竞赛培…