深入浅出排序算法之希尔排序

news2024/9/25 9:37:54

目录

1. 原理

2. 代码实现

3. 性能分析


1. 原理

希尔排序法又称缩小增量法。希尔排序法的基本思想是:先选定一个整数,把待排序文件中所有记录分成个组,所有距离为的记录分在同一组内,并对每一组内的记录进行排序。然后,取,重复上述分组和排序的工作。当到达=1时,所有记录在统一组内排好序。

(1)希尔排序是对直接插入排序的优化。
(2)当gap > 1时都是预排序,目的是让数组更接近于有序。当gap == 1时,数组已经接近有序的了,这样就会很快。这样整体而言,可以达到优化的效果。我们实现后可以进行性能测试的对比。

 

2. 代码实现

    //希尔排序
    public static void shellSort(int[] array){
        int gap = array.length;
        while(gap > 1){
            shell(array,gap);
            gap /= 2;//增量是多少都可以,随便小伙伴们写
        }
        shell(array,1);
    }
    //有增量的直接插入排序
    //不是一组希尔排序全部排完,是间隔性的,可能是第一组先插一个,第二组再插一个,第一组再插……
    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] > array[j+gap]){
                    array[j + gap] = array[j];
                }
                else{
                    break;
                }
            }
            array[j + gap] = tmp;
        }
    }


    public static void main(String[] args) {
        int[] arr = {3,1,2,4,5};
        Sort.shellSort(arr);
        for (int x : arr) {
            System.out.print(x + " ");
        }
    }

3. 性能分析

时间复杂度空间复杂度
最好平均最坏
O(N)O(N^1.3)O(N^2)O(1)
数据有序难以构造出来
    public static void main(String[] args) {

        int[] arr2 = new int[10000];
        Test.createArray2(arr2);
        long s2 = System.currentTimeMillis();
        Sort.insertSort(arr2);
        long e2 = System.currentTimeMillis();
        System.out.println("直接插入排序的数组逆序的情况:"+(e2 - s2));

        int[] arr1 = new int[10000];
        Test.createArray2(arr1);
        long s1 = System.currentTimeMillis();
        Sort.shellSort(arr2);
        long e1 = System.currentTimeMillis();
        System.out.println("希尔排序的数组逆序的情况:"+(e1 - s1));
    }

稳定性:不稳定。

由于增量不同,可能导致本来在后面的元素跑到前面去!

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

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

相关文章

Linux环境基础开发工具的使用

目录 一、Linux软件包管理器yum 1.1 Linux下载软件的方式 1.2 认识yum 1.3 查看软件包 1.4 安装软件 1.5 本地机器与云服务器文件互传 1.6 卸载软件 二、编辑器vim 2.1 vim下各模式的切换 2.2 命令模式下各命令汇总 2.3 底行模式各命令汇总 2.4 vim的简单配置 三…

二十一、设计模式之解释器模式

目录 二十一、设计模式之解释器模式能帮我们干什么&#xff1f;主要解决什么问题&#xff1f;优缺点优点缺点&#xff1a; 使用的场景角色和职责实现解释器 总结 二十一、设计模式之解释器模式 所属类型定义行为型允许你定义一个语言并解释该语言中的表达式 能帮我们干什么&am…

C++之lambda匿名函数总结(二百四十五)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

基于springboot实现人事管理系统项目【项目源码+论文说明】

基于springboot实现人事管理系统演示 摘要 首先,论文一开始便是清楚的论述了系统的研究内容。其次,剖析系统需求分析,弄明白“做什么”,分析包括业务分析和业务流程的分析以及用例分析,更进一步明确系统的需求。然后在明白了系统的需求基础上需要进一步地设计系统,主要包罗软件…

WordPress简约响应式个人博客Kratos主题

Kratos主题基于Bootstrap和Font Awesome的WordPress一个干净&#xff0c;简单且响应迅速的博客主题 下载地址 qnziyw点cn/cmsmb/wordpress/6559点html 注意&#xff1a;点换成小数点就可以了

【lesson2】数据库的库操作

文章目录 库操作创建数据库删除数据库字符集和校验规则手动设置字符集和校验集不同字符集和校验集之间的区别修改数据库字符集和校验集备份和恢复数据库 库操作 创建数据库 删除数据库 字符集和校验规则 创建数据库的时候&#xff0c;有两个编码集&#xff1a; 1.数据库编码集…

数据结构与算法之矩阵: Leetcode 48. 旋转矩阵 (Typescript版)

旋转图像 https://leetcode.cn/problems/rotate-image/ 描述 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。你必须在 原地 旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 示例 1 输入&…

tooltip实现悬停内容染色

一: 通过highlight.js项目实现对json字符串的染色高亮 此项目是jsp文件,并且引用了element-ui/highlight.js的组件 二: 实现效果 三: 代码实现 关键点在于成功引入相关的js及css&#xff0c;并且在tooltip渲染时进行数据染色。再将染色后的数据放到v-html中进行页面渲染(关键方…

智能视频监控平台EasyCVR级联后,上级平台如何获取下级的云端录像?

视频汇聚/视频云存储/集中存储/视频监控管理平台EasyCVR能在复杂的网络环境中&#xff0c;将分散的各类视频资源进行统一汇聚、整合、集中管理&#xff0c;实现视频资源的鉴权管理、按需调阅、全网分发、云存储、智能分析等。 有用户咨询&#xff0c;在EasyCVR级联上级时&#…

2023年香水行业数据分析:国人用香需求升级,高端香水高速增长

在人口结构变迁的背景下&#xff0c;“Z世代”作为当下我国的消费主力&#xff0c;正在将“悦己”消费推动成为新潮流。具备经济基础的“Z世代”倡导“高颜值”、“个性化”、“精致主义”&#xff0c;这和香水、香氛为代表的“嗅觉经济”的特性充分契合&#xff0c;因此&#…

字符设备驱动注册的本质及注册注销步骤,struct inode/file结构体作用

一、字符设备注册的本质及注册注销步骤 字符设备驱动注册的本质 只要某个信息存在于操作系统上&#xff0c;在操作系统中一定存在一个描述这个信息的对象&#xff0c;字符设备驱动注册进内核&#xff0c;在内核中一定会存在一个字符设备驱动对象保存当前的字符设备驱动的信息。…

【Unity】【VR】如何用键鼠模拟VR输入

【项目设置】 建立一个3D项目 Project Settings下最下方安装PlugIn Management&#xff0c;选中HMD 打开Windows->Package Manager->Unity Registry&#xff0c;列表下方XR Interaction Toolkit&#xff0c;点击Install&#xff0c;安装完成后再安装Sample&#xff0c…

北京等保测评:携手守护网络安全!

等保流程可以分为以下几个步骤&#xff1a;定级备案、初测及整改、测评和监督。 一、等保定级备案 根据《信息系统安全等级保护定级指南》和《信息安全等级保护管理办法》的要求&#xff0c;进行等保定级备案。包括以下几个步骤&#xff1a; 写信息安全管理制度&#xff0c;包括…

【Python学习】—Python基础语法(五)

【Python学习】—Python基础语法&#xff08;五&#xff09; 一、循环的嵌套使用 二、九九乘法表 #外层循环表示行数 for i in range(1,10):#内层循环表示每一行的数据for j in range(1,i1):#输出每一行的内容print(f"{i} * {j} {i * j} \t",end"") #外层…

2023 年最佳开源软件

InfoWorld 公布了 2023 年最佳开源软件榜单&#xff0c;旨在表彰年度领先的软件开发、数据管理、分析、人工智能和机器学习开源工具。 上榜的 25 个软件涵盖编程语言、运行时、应用程序框架、数据库、分析引擎、机器学习库、大型语言模型 (LLM)、用于部署 LLM 的工具等领域 Ap…

提升技能,挑战自我——一站式在线题库小程序

在这个信息爆炸的时代&#xff0c;我们总是在寻找一种方式&#xff0c;让自己在众多的知识海洋中快速提升技能&#xff0c;挑战自我。今天&#xff0c;我要向大家推荐一款全新的在线题库小程序KD蝌蚪阿坤&#xff0c;它将帮助你实现这个目标。 KD蝌蚪阿坤是一款全面的在线题库…

长城首款MPV上市,能否迎来「高山」时刻?

作者 | Amy 编辑 | 德新 去年下半年起&#xff0c;自主品牌接二连三抢占高端MPV市场&#xff0c;腾势D9、岚图梦想家、极氪009以及传祺E9等车型接连亮相。 国泰君安证券研究报告显示&#xff0c;新能源MPV 2021年、2022年年销量分别为4.4万和9.2万辆&#xff0c;今年上半年销…

Tp框架如何使用事务和锁,还有查询缓存

1.事务 在ThinkPHP框架中&#xff0c;可以使用think\db\Transaction类来实现事务。 use think\Db; use think\db\Transaction;// 开始事务 Db::startTrans();try {// 执行数据库操作Db::table(user)->where(id, 1)->update([name > John]);// 提交事务Db::commit(); }…

5、计算电机速度【51单片机控制步进电机-TB6600系列】

摘要&#xff1a;本节介绍用定时器定时的方式&#xff0c;精准控制脉冲时间&#xff0c;从而控制步进电机速度。 一、计算过程 电机每一步的角速度等于走这一步所花费的时间&#xff0c;走一步角度等于步距角&#xff0c;走一步的时间等于一个脉冲的时间&#xff1a; TB6600及…

Java中ThreadLocal对象的使用

目录 1、Threadlocal简介 2、ThreadLocal的主要方法&#xff1a; 2.1 initialValue()&#xff1a;初始化ThreadLocal变量的值 2.2 set()&#xff1a;为当前线程设置ThreadLocal变量的值 2.3 get()&#xff1a;获取当前线程中ThreadLocal变量的值 2.4 remove()&#xff1a…