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

Java希尔排序

希尔排序是一种改进的插入排序算法,也称为缩小增量排序。它通过将待排序的数组按照一定的间隔分割成若干个子序列,然后对这些子序列进行插入排序,随着排序进行,逐渐减小间隔,直至间隔为1,最后对整个数组进行一次插入排序。这样做的好处是,在初始阶段,子序列中的元素较少,插入排序的代价较小,而且数组中的元素已经基本有序,这样一来,后续的插入排序效率就会提高。

希尔排序的步骤如下:

  1. 选择一个增量序列,一般选择增量序列为n/2, n/4 , … , 1,其中n为数组的长度。
  2. 按照增量序列对数组进行分组,分成若干个子序列。
  3. 对每个子序列进行插入排序。
  4. 缩小增量,重复步骤2和3,直至增量为1。

下面是用Java实现的希尔排序示例代码:

public class ShellSort {

    public static void shellSort(int[] arr) {
        int n = arr.length;
        // 初始增量设定为数组长度的一半,依次递减, 这里的 /2 可以用 >>1 替代,性能更佳
        for (int gap = n / 2; gap > 0; gap /= 2) {
            // 对每个子序列进行插入排序
            for (int i = gap; i < n; i++) {
                int temp = arr[i];
                int j = i;
                // 插入排序
                while (j >= gap && arr[j - gap] > temp) {
                    arr[j] = arr[j - gap];
                    j -= gap;
                }
                arr[j] = temp;
            }
        }
    }

    public static void main(String[] args) {
        int[] arr = {5, 4, 1, 3, 2, 6, 8, 7, 9};
        System.out.println("排序前数组:" + Arrays.toString(arr));
        shellSort(arr);
        System.out.println("排序后数组:" + Arrays.toString(arr));
    }
}

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

相关文章:

  • 离线数仓-数据治理
  • C++ //练习 4.2 根据4.12节中的表,在下述表达式的合理位置添加括号,使得添加括号后运算对象的组合顺序与添加括号前一致。
  • 2023年最受欢迎的4款绘图软件全面评测!
  • Hadoop生态系统中一些关键组件的详细解析
  • 如何选择Centos的替代者
  • GO EASY 框架 之 NET 05
  • 【数据结构】二叉树链式结构的实现
  • 明天是几号(c++题解)
  • scoped样式隔离原理
  • springboot在线文档的集成方式
  • MaxKey 单点登录认证系统——登录验证流程分析
  • LeAPI 后端接口开发 - 发布、下线接口
  • 正点原子--STM32定时器学习笔记(2)
  • 商品信息全景图:API接口在聚合商品数据中的应用
  • Shell脚本是一种用来自动化执行一系列命令的文本文件
  • Pinia:一个Vue的状态管理库
  • 操作系统透视:从历史沿革到现代应用,剖析Linux与网站服务架构
  • HBase 数据导入导出
  • Jenkins(三):自动化部署SpringBoot项目
  • 突破编程_C++_面试(基础知识(5))