排序算法-希尔排序

2023-11-15

属性

        1. 希尔排序是对直接插入排序的优化。

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

        3. 希尔排序的时间复杂度不好计算,因为gap的取值方法很多,导致很难去计算,因此在好些树中给出的希尔排 序的时间复杂度都不固定:

        4. 稳定性:不稳定

        

代码及其注释

public class ShellSort {
    //希尔排序实际上就是分多个组进行多次的插入排序,前几次插入排序都只是为了让数据更加有序,最后一次排序才是真正的排序数据

    public static void shellSort1(int[]arr){
        //首先要获得此次进行插入排序时同一组数之间的间隙
        //间隙的计算是很讲究的,但这里就直接用数组长度的二分之一作为间隙,之后再依次取二分之一,直到间隙为1
        //间隙为1时才是真正的对数组进行排序
        int gap=arr.length/2;
        while (gap>=1){
            shell1(arr,gap);
            gap=gap/2;
        }
    }

    //传入要排序的数组,以及在进行插入排序时,同一组数据在数组之间的间隙,进行插入排序
    //shell的代码其实就是根据间隙gap对插入排序进行一些修改
    private static void shell1(int[]arr,int gap){
        for(int i=gap;i<arr.length;i++){
            int tmp=arr[i];
            int j=i-gap;
            for(;j>=0;j-=gap){
                if(arr[j]>tmp){
                    arr[j+gap]=arr[j];
                }
                else {
                    break;
                }
            }
            arr[j+gap]=tmp;
        }
    }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

排序算法-希尔排序 的相关文章

随机推荐

  • 基于vue开发一个组件库

    基于vue开发一个组件库 如果团队存在多个不同的项目都会使用一致的组件设计规范 那么搭建组件库无疑是不二选择 接下来我们直接开始实现组件库的搭建 1 首先安装vue cli3并创建一个项目 创建项目 vue create tset 关于vu
  • Mysql中的连接方式

    1 内连接 内连接查询的是两张表的交集 也就是A表和B表都必须有数据才能查询出来 join和on是一起的 select from A join B on A id B id select from A inner join B on A i
  • springboot项目接口给null给前端返回空字符串。

    代码 Configuration public class JacksonConfig Bean public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageCo
  • 使用docker搭建Grafana+influx 实时监控Jmeter压测平台

    准备工作 jmeter 压测工具 产生压测数据 IfluxDB 开源时序数据库 特别适合用于处理和分析资源监控数据 用于存储压测数据 Grafana 度量分析与可视化图标展示工具 可以支持不用种类的数据源 用于将存储于InfluxDB中的数
  • Qt实现图片的简单压缩

    在编程过程中 涉及到网络传输或资源加载时 过大的图片往往是编程人员的噩梦 加载时间过长 体验效果差 特别在即时通讯的发送图片时 大图往往半天加载不出来 于是 先对图片进行压缩 暂时显示模糊图片 然后下载大图最后更新下载的大图 这一过程成为解
  • 任务长期不释放和占用单节点持续的cpu,导致hivesever2本身内存泄漏造成

    任务长期不释放和占用单节点持续的cpu 导致hivesever2本身内存泄漏造成 产生的原因在于 查询过于复杂或者数据量过大 当有复杂的查询或处理大量数据的请求时 HiveServer2可能会出现高负载 这可能涉及大量的计算 IO操作或涉及
  • macm1环境下jdk版本切换

    macm1环境下jdk版本切换 本文目录 macm1环境下jdk版本切换 下载jdk 安装 动态切换jdk 终端生效 全局生效 参考 下载jdk oracle官方源下载地址 https www oracle com java technol
  • 一个新的微型JSON开源框架

    Snack3 一个新的微型JSON框架 一个作品 一般表达作者的一个想法 因为大家想法不同 所有作品会有区别 就做技术而言 因为有很多有区别的框架 所以大家可以选择的框架很丰富 snack3 基于jdk8 60kb 无其它依赖 非常小巧 强
  • OperationalError: (2005, "Unknown MySQL server host 'localhost' (11001)")

    在调试Django时突然报OperationalError 2005 Unknown MySQL server host localhost 11001 这个错误 根据提示信息判断是说mysql server 无法识别 localhost
  • $nextTick的作用和使用场景

    nextTick的作用和使用场景 vue中的nextTick主要用于处理数据动态变化后 DOM还未及时更新的问题 用nextTick就可以获取数据更新后最新DOM的变化 适用场景 第一种 有时需要根据数据动态的为页面某些dom元素添加事件
  • 解决延迟有 Wi-Fi 6 就够了!

    最近二狗子家里的路由器坏了 而家里的数据网络信号又非常差 失去了路由器基本上就等于和世界隔离 所以二狗子打算去附近商城随便买一个新的路由器 结果售货员张口就问 买 Wi Fi 6 的路由器吗 Wi Fi 6 这直接把二狗子问懵了 Wi Fi
  • Serverless Kubernetes 应用部署及扩缩容

    作者 邓青琳 轻零 阿里云技术专家 导读 本文分为三个部分 首先给大家演示 Serverless Kubernetes 集群的创建和业务应用的部署 其次介绍 Serverless Kubernetes 的常用功能 最后对应用扩缩容的操作进行
  • 医学图像分割研究思路

    医学图像分割的主流方法之一是基于水平集 Level Set 的分割方法 目前针对主流的分割方法 我们主体研究思路如下图 在模型凸化以及形状先验两个方面 未开展相关工作 参考文献 部分演示代码 参数随图像需要调整 7 Xiaomeng Xin
  • 重新生成一堆rpm目录的repo库步骤

    createrepo c repo2module s stable modules yaml modifyrepo c mdtype modules modules yaml repodata
  • IntelliJ IDEA插件搜索下载缓慢

    我用的版本是2019 2 1 搜索插件特别慢 有时候加载不出来 看到别人说是用 Setting Appearance Behavior Syetem Setting Updates 将Use secure connection 的勾选去掉
  • java----面向对象和面向过程

    1 面向对象思想 面向对象四星思想就是把关注点放在一件事或一个活动中设计的人或事物上的思想 2 面向过程思想 面向过程思想就是把关注点放在一件事或一个活动中设计的人或事物所涉及的步骤上的思想 3 面向过程关键字 步骤 过程 4 面向对象关键
  • 一周 8k Star 的 Notion 开源替代品 AppFlowy 诞生

    近日 Notion 的开源替代品 AppFlowy 正式发布了 一经发布 在短短一周就获得了近 8k Star 这个成绩对于一个开源项目来说是非常不错的 那么为什么有了 Notion AppFlowy 团队却要从头开始开发一个类似的产品呢
  • 框架--SpringWeb

    文章目录 一 springweb 1 概述 2 springWeb层搭建 3 请求中的地址如何定义 4 如何接收请求中的数据 5 直接使用对象接收 6 post请求中文乱码处理 7 Ajax 返回 JSON 8 跨域问题 9 拦截器 10
  • string头文件常用方法(C++)

    string 定义字符串 如果未赋初值 则默认是 即空字符串 结尾也没有结束标志 0 include
  • 排序算法-希尔排序

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