数据结构-希尔排序(ShellSort)笔记

看动画理解

【数据结构】八大排序(超详解+附动图+源码)_数据结构排序-CSDN博客

一 基本思想

先选定一个整数gap,把待排序文件中所有记录分成gap个组,所有距离为gap的记录分在同一组内,并对每一组内的元素进行排序。

然后将gap逐渐减小重复上述分组和排序的工作。

当到达gap=1时,所有元素在统一组内排好序。

二 代码实现

java 复制代码
import java.util.Arrays; // 导入Arrays类,用于数组操作

public class Main {
    // 主方法,程序的入口点
    public static void main(String[] args) {
        // 初始化一个整型数组,包含一些元素
        int arr[] = {1, 33, 2, 645, 747, 876, -1, -12345, 9, 10};
        
        // 调用sort1方法对数组进行排序
        sort1(arr);
        
        // 使用Arrays.toString方法打印排序后的数组
        System.out.println(Arrays.toString(arr));
    }

    // 定义一个私有静态方法sort1,用于对整型数组进行排序
    private static void sort1(int[] arr) {
        // 外层循环,控制间隔gap的值
        for(int gap = arr.length / 2 ; gap > 0; gap /= 2){
            // 内层循环,从gap开始遍历数组
            for(int i = gap; i < arr.length; i++){
                // 最内层循环,用于比较和交换元素
                for(int j = i - gap; j >= 0; j--){
                    // 如果当前元素比它后面gap位置的元素大,则交换它们
                    if(arr[j] > arr[j + gap]){
                        int temp = arr[j];
                        arr[j] = arr[j + gap];
                        arr[j + gap] = temp;
                    }
                }
            }
        }
    }
}

三 希尔排序的特性总结

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

当gap > 1时都是预排序,目的是让数组更接近于有序。当gap == 1时,数组已经接近有序的了,这样就会很快。这样整体而言,可以达到优化的效果。

希尔排序的时间复杂度不好计算,因为gap的取值方法很多,导致很难去计算,这里不深究。

时间复杂度O(N^1.5)

空间复杂度O(1)

稳定性:不稳定。

相关推荐
木子墨5164 小时前
工程算法实战 | 从LRU到手写本地缓存:LinkedHashMap → 双向链表+哈希表 → Caffeine 原理
java·数据结构·算法·链表·缓存
largecode5 小时前
能不能让座机号码显示“XX公司”那样的认证名称?申请号码认证方法
经验分享·笔记·音视频·课程设计·oneapi·segmentfault·微信开放平台
流年如夢5 小时前
二叉树(LeetCode)
数据结构·算法·leetcode·职场和发展
Hua-Jay5 小时前
OpenCV联合C++/Qt 学习笔记(十七)----凸包检测、直线检测及点集拟合
c++·笔记·qt·opencv·学习·计算机视觉
是喵斯特ya5 小时前
红日内网靶场1环境搭建
笔记
玉树临风ives5 小时前
atcoder ABC 457 题解
数据结构·c++·算法
驭渊的小故事5 小时前
Java数据结构集合框架(栈(Stack)的详细解析)2000字详细解析
数据结构
中屹指纹浏览器5 小时前
2026浏览器插件扩展安全风险溯源与环境隔离防护规范
经验分享·笔记
宵时待雨6 小时前
回溯算法专题1:递归
数据结构·c++·笔记·算法·leetcode·深度优先
今儿敲了吗6 小时前
面向对象(三)——设计模式
笔记·设计模式