当前位置: 首页 > article >正文

Java排序算法之希尔排序

希尔排序(Shell Sort)又称“缩小增量排序”,是直接插入排序算法的一种更高效的改进版本。它的基本思想是:首先将整个数组按照一定的间隔分成若干个子序列,然后对每个子序列分别进行插入排序,减小间隔,再进行排序,直至间隔减至1。该算法主要分为以下几个步骤:

  1. 先确定一个增量(间隙)序列,通常以数组长度的一半作为初始增量,不断缩小增量的值,直到为1为止。

  2. 以增量序列中的每个值作为间隔,将待排序元素分成若干个子序列,分别进行插入排序。

  3. 缩小增量,重复第二步操作,直到增量等于1。

希尔排序的时间复杂度为O(nlogn),相对于直接插入排序算法的O(n^2)要快得多,尤其是对于大规模数据的排序。

希尔排序是插入排序的一种改进和升级版本,其原理是将待排序的序列分成若干组,对每组进行插入排序,并逐步增加每组的元素数量,最终完成对整个序列的排序。下面是Java实现希尔排序的代码示例:

public class ShellSort {
    public static void shellSort(int[] arr) {
        int len = arr.length;
        int gap = len / 2;
        while (gap > 0) {
            for (int i = gap; i < len; i++) {
                int cur = arr[i];
                int preIndex = i - gap;
                while (preIndex >= 0 && arr[preIndex] > cur) {
                    arr[preIndex + gap] = arr[preIndex];
                    preIndex -= gap;
                }
                arr[preIndex + gap] = cur;
            }
            gap /= 2;
        }
    }

    public static void main(String[] args) {
        int[] arr = { 4, 6, 8, 1, 3, 5, 9, 2, 7 };
        shellSort(arr);
        System.out.println(Arrays.toString(arr));
    }
}

在这个示例中,我们首先定义了shellSort方法,它接受一个整数数组作为输入。我们首先获取该数组的长度,并将其折半作为间隔长度。然后,我们使用while循环,通过逐渐减小间隔数来逐步增加每组的元素数量。在for循环中,我们使用插入排序方法对每组进行排序。最后,我们将间隔长度除以2,然后继续进行排序,直到间隔长度为1。

在main方法中,我们使用示例数组调用shellSort方法,然后使用Arrays.toString方法打印排序后的数组。


http://www.kler.cn/a/132388.html

相关文章:

  • HCIP --OSI七层参考模型回顾、TCP/UDP协议复习
  • Stable Diffusion核心网络结构——CLIP Text Encoder
  • 远程jupyter lab的配置
  • 【UGUI】背包的交互01(道具信息跟随鼠标+道具信息面板显示)
  • 2411rust,1.80
  • 剧本杀门店预约小程序,解锁沉浸式推理体验
  • 【算法】Java 算法设计模式的应用场景
  • Kafka入门教程与详解(一)
  • Git 分支管理
  • JVM判断对象是否存活之引用计数法、可达性分析
  • 最新AI创作系统ChatGPT系统运营源码+支持GPT-4多模态模型
  • 【C++】泛型编程 ⑥ ( 类模板 | 类模板语法 | 代码示例 )
  • PyCharm中常用插件推荐
  • 【Mysql】学习笔记
  • U-boot(二):主Makefile
  • 大型且复杂项目的资源管理怎么做?
  • 模拟实现一个Linux中的简单版shell
  • 6.docker运行mysql容器-理解容器数据卷
  • 邀请报名|11月24日阿里云原生 Serverless 技术实践营 深圳站
  • 概率论和数理统计(四)方差分析与回归分析
  • Windows10下Mysql8.0安装教程
  • 圆弧插补-逐点比较法
  • 【机器学习Python实战】线性回归
  • 计算机视觉的应用16-基于pytorch框架搭建的注意力机制,在汽车品牌与型号分类识别的应用
  • 力扣:168. Excel表列名称(Python3)
  • Qt退出界面