【Java】插入排序和希尔排序---图解超详细

news2025/1/16 2:01:35

目录

插入排序

插入排序的核心图解

希尔排序

希尔排序详细图解


插入排序

插入排序的交换精髓在于 每次随着i的扩大,i走过的路径都是有序的,这和冒泡的思想有异曲同工之处,冒泡是i走一次,数组的最后变成有序的,而插入排序是

插入排序是 i 在前面  j在后面

插入排序的核心图解:

我现在有如下数组:
int []arr ={4,6,9,1,11,5,14,6};

        

我们依旧和冒泡排序一样需要两个指针 这次就是 i 和  j

重点在于:每次随着i的扩大,i走过的路径都是有序的

我们发现0到2,也就是前三个都是有序的! 

于是等到i的值为3的时候

注意观测j和i的位置!!!


1是小于9的,所以触发交换

此时发现1还是比前一个 6小 ,所以必须贯彻 每次随着i的扩大,i走过的路径都是有序的


1是小于6的,所以触发交换

 


接着 是1和4的交换


 自此i走过的路程都是有序的了

 


此后就是不断重复这个过程,直到i走到数组的末尾!

整个数组也有序了!

Java代码


    //插入排序
    static  void insertSort(int []arr){

        for (int i = 1; i < arr.length; i++) {

            for (int j = i-1; j >=0; j--) {

                if (arr[j]>arr[j+1]){//判断条件
                    swap(arr,j,j+1);
                }
                else {
                    break;
                }

            }
        }
    }
    //交换函数
    static void swap(int []arr,int x,int y){
        int tmp=arr[x];
        arr[x]=arr[y];
        arr[y] = tmp;
    }

不难看出这个的时间复杂度是O(N^2)

(什么你还不会看时空间复杂度?建议你去b站恶补一下...)


希尔排序

不是这个希尔!

希尔排序,也称为缩小增量排序,是一种基于插入排序的排序算法。它通过比较距离较远的元素,将较小的元素交换到前面,从而逐步减小数组的无序程度,最终实现数组的排序。

她的精髓就在于---分组! 在插入排序的基础上进行分组

一般选择是 将数组分成arr.length/2 然后再把分组范围扩大

比如

第一次这个数组 选择分4组 ,下一次就分成2组

分组后进行选择排序,在数据量小的情况下和插入排序差不多,但是数据量的时候比插入排序快很多

为什么快很多?我也不知道,数学家算出来的,就是快很多

希尔排序的时间复杂度和增量序列的选择有关系,一般情况下希尔排序的时间复杂度为O(n^2) ~ O(n^1.5)。空间复杂度为O(1),是一种原地排序算法。


希尔排序详细图解:

第一次分组,同一个组别的进行选择排序


第二次分组

分组后,排序后的结果

 箭头指向的是交换了的位置


我们发现每次组员都会扩大2倍,这个数组到第3次就变成了进行一次选择排序了

所有的希尔排序,到最后都会进行一次完整的选择排序,但是此时数组已经趋近于有序了


 再来回顾一下

  1. 选择一个增量序列,增量序列是一个数组,一般是按照一定的规则(这里是2)生成的;
  2. 对于每个增量,将数组分为若干个子序列,子序列中的元素相隔增量个位置;
  3. 对每个子序列进行插入排序,即将每个子序列看成一个独立的数组进行插入排序;
  4. 增量为1时,进行一次插入排序,排序结束。

Java代码

  //交换函数
    static void swap(int []arr,int x,int y){
        int tmp=arr[x];
        arr[x]=arr[y];
        arr[y] = tmp;
    }


    //希尔排序
    static  void shellSort(int []arr){
        for (int k= arr.length/2;k > 0; k/=2){//要不要取等号?不用
            for (int i = k; i < arr.length ; i++) {//i和j的范围取值和插入排序一致
                for (int j = i-k; j >=0 ; j-=k) {

                    if (arr[j]>arr[j+k]){
                        swap(arr,j,j+k);
                    }
                    else {
                        break;
                    }
                }
            }
        }

 


哈,谢谢各位同志的阅读,然后呢如果觉得本文对您有所帮助的话,还给个免费的赞捏

Thanks♪(・ω・)ノ

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

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

相关文章

C- 符号

文章目录 符号#ifdef-#endif\接续符转义旋转光标数字倒计时 单引号-双引号逻辑运算符&& ||短路 位运算符异或位运算最好使用定义好的宏左移右移 后置前置复杂表达式 取整0向取整(C中默认取整方式)floor地板取整ceilround 四舍五入 取模取余和取模一样吗? 运算符优先级…

两小时让你全方位的认识文件(一)

想必友友们在生活中经常会使用到各种各样的文件&#xff0c;那么我们是否了解它其中的奥秘呢&#xff0c;今天阿博就带领友友们深入地走入文件&#x1f6e9;️&#x1f6e9;️&#x1f6e9;️ 文章目录 一.为什么使用文件二.什么是文件三.文件的打开和关闭四.文件的顺序读写 一…

网页自动化工具DrissionPage

逛Github时偶然看到的开源项目&#xff0c;DrissionPage是一款新的基于 python 的网页自动化工具。 笔者已测试过&#xff0c;给大家推荐下。 项目地址&#xff1a;https://gitee.com/g1879/DrissionPage 安装测试 安装命令 pip install DrissionPage测试 from Drissio…

unity | 处理string常用的知识(持续更新)

一、转义字符和的用法 1.常规用法 我们现在有一行字&#xff0c;但是我对它的格式之类的有要求 例&#xff1a;天无绝人之路&#xff0c;条条道路通罗马。 我想打成&#xff1a; 天无绝人之路&#xff0c; 条条道路通罗马。 换行前&#xff0c;写法是&#xff1a; string s …

科海思—美国杜笙Tulsimer中国区总代理,制糖脱色树脂A-722

一、产品介绍 具有控制孔径的大孔强碱性Ⅰ型阴特种脱色用离子交换树脂 Tulsimer A-722是一款具有便于颜色和有机物去除的控制孔径的&#xff0c;专门开发的大孔强碱性Ⅰ型阴离子交换树脂。 Tulsimer A-722 &#xff08;氯型&#xff09;专门应用于糖浆脱色。 Tulsimer A…

Python学习简记

常用数据类型 整数类型int 二进制以0b开头八进制以0o开头十六进制以0x开头 这里还有一个值得注意的点&#xff1a;python中的整型是“无限长”的&#xff0c;因此它可以表示任何数 浮点数 python中只有float作为浮点数&#xff0c;没有double 主要注意python中对浮点数与Decima…

Spring系统架构与主要概念

Spring系统架构与主要概念 Spring Framework系统架构Core Container 核心容器AOP 层数据层Web层测试层 业务逻辑Spring之前遇到的问题解决方案 Spring核心概念IOC&#xff08;Inversion of Control&#xff09;控制反转DI&#xff08;Dependency Injection&#xff09;依赖注入…

SRv6实践项目(四):基于YANG的配置下发

在本章节&#xff0c;主要是了解YANG是什么&#xff0c;以及基于YANG下发配置的工作原理&#xff1a; 1.什么是YANG 在介绍之前&#xff0c;为了给大家一个最直观的感受&#xff0c;我们打开yang工具&#xff0c;它被打包成一个容器了&#xff0c;可以轻松的使用&#xff0c;…

完美解决丨1. **`SyntaxError: invalid syntax`**

SyntaxError: invalid syntax 因为没有符合语法要求&#xff0c;导致报错。 解决办法&#xff1a; 语法错误的原因主要是代码的风格&#xff0c;例如&#xff1a; 左括号或者右括号没有配对&#xff1b;左括号或者右括号没有放在语句的正确位置&#xff1b;缺少冒号&#xff1…

Window10下安装DPDK

由于我装的是vs2019&#xff0c;打开Visual Studio Installer&#xff0c;在可选下&#xff0c;选择Windows 10 SDK&#xff0c;点击修改。 右键此电脑属性&#xff0c;查看Windows10版本。 安装WDK&#xff0c;打开网址https://learn.microsoft.com/zh-cn/windows-hardware/…

计算机系统-链接

例行前言&#xff1a; 本篇不是学习课程时的笔记&#xff0c;是重看这本书时的简记。对于学习本课程的同学&#xff0c;未涉及的内容不代表考试不涉及&#xff0c;部分省略的部分是在该课程的讨论课中学习的(PIC&#xff0c;放出了我在讨论课中的PPT作为参考)&#xff0c;核心…

Sentinel使用

文章目录 一. 初识Sentinel1. 雪崩问题及解决方案2. 服务保护技术对比3. Sentinel介绍和安装4. 微服务整合Sentinel 二. 限流规则1. 快速入门2. 流控模式3. 流控效果4. 热点参数限流 三. 隔离与降级—调用方保护方案1. FeignClinet整合sentinel2. 线程隔离&#xff08;舱壁模式…

vue3中的单文件组件<script setup>和setup函数区别 详解

文章目录 简介基本语法变量和方法多的使用注册组件动态组件使用外部文件方法组件通信props与defineProps、emitdefineEmitsdefineExpose 获取 attrs、slots 和useAttrs、useSlots 方法与普通的 < script > 一起使用v-bind() CSS变量注入style的新特性之global对await异步…

行业认可,知道创宇入选安全牛第十版全景图30个细分领域

近日&#xff0c;国内网络安全领域专业媒体安全牛正式发布了第十版《中国网络安全行业全景图》&#xff08;以下简称“全景图”&#xff09;&#xff0c;知道创宇凭借过硬的技术实力及成熟的市场应用获得行业认可&#xff0c;入围10项一级安全分类共计30项二级细分领域&#xf…

ASEMI代理ADI亚德诺AD8130ARZ-REEL7车规级芯片

编辑-Z AD8130ARZ-REEL7芯片参数&#xff1a; 型号&#xff1a;AD8130ARZ-REEL7 −3dB带宽&#xff1a;250MHz 0.1 dB平坦度的带宽&#xff1a;25MHz 斜率&#xff1a;930V/μs 建立时间&#xff1a;20ns 上升和下降时间&#xff1a;1.5ns 输出超速恢复&#xff1a;30n…

访学案例分享|经济学老师获英国两高校邀请函

D老师所在国内高校鼓励教职员工通过各种渠道公派或者自筹经费出国访学进修。在考虑了学校要求及个人条件后&#xff0c;其决定用自费方式赴英国访学。我们分别获得了英国利兹贝克特大学和邓迪大学的邀请函&#xff0c;最终D老师顺利过签&#xff0c;如期出国。 D老师背景&#…

网络编程【UDP数据报套接字编程】

目录 1.网络编程基础 1.1 为什么需要网络编程&#xff1f; 1.2 什么是网络编程 1.3 网络编程中的基本概念 2.Socket套接字 2.1 分类 3.UDP数据报套接字编程 3.1 DatagramSocket API 3.2 DatagramPacket API 3.3 基于 UDP socket 写一个简单的回显客户端服务器程序&am…

设计模式 -- 桥梁模式

前言 月是一轮明镜,晶莹剔透,代表着一张白纸(啥也不懂) 央是一片海洋,海乃百川,代表着一块海绵(吸纳万物) 泽是一柄利剑,千锤百炼,代表着千百锤炼(输入输出) 月央泽,学习的一种过程,从白纸->吸收各种知识->不断输入输出变成自己的内容 希望大家一起坚持这个过程,也同…

自适应安全、主权云、超级自动化顶级政府技术趋势

根据分析公司 Gartner 的数据&#xff0c;自适应安全、主权云和超级自动化是 2023 年十大政府技术趋势之一。 确定了 2023 年的 10 大政府技术趋势&#xff0c;这些趋势可以指导公共部门领导者在为后数字化政府做准备和不懈地关注任务目标时加速转型。 当前的全球动荡和技术中…

9-2分布迭代次数的15个梯度

( A, B )---1*30*2---( 1, 0 )( 0, 1 ) 让网络的输入只有1个节点&#xff0c;AB训练各由11张二值化的图片组成&#xff0c;让A中有3个0&#xff0c;B中全是0&#xff0c;排列组合A的所有可能&#xff0c;统计迭代次数的顺序。 A-B 迭代次数 标准差 势能 标准差势能 11 …