四、C#希尔排序算法

简介

希尔排序简单的来说就是一种改进的插入排序算法,它通过将待排序的元素分成若干个子序列,然后对每个子序列进行插入排序,最终逐步缩小子序列的间隔,直到整个序列变得有序。希尔排序的主要思想是通过插入排序的优势,减小逆序对的距离,从而提高排序效率。

希尔排序实现原理

  1. 首先要确定一个增量序列(初始间隔),将待排序序列分成多个子序列。

  2. 对每个子序列分别进行插入排序,即在子序列内部进行排序。

  3. 逐步减小增量,重复步骤2,直到增量为1,即完成最后一次插入排序,排序完成。

希尔排序代码实现

cs 复制代码
     public static void ShellSort(int[] array)
        {
            int arrLength = array.Length;

            // 初始化增量(初始间隔)为数组长度的一半
            int gap = arrLength / 2;

            // 不断缩小增量,直到增量为1
            while (gap > 0)
            {
                // 对每个子序列进行插入排序
                for (int i = gap; i < arrLength; i++)
                {
                    int temp = array[i];
                    int j = i;

                    // 在子序列内部进行插入排序
                    while (j >= gap && array[j - gap] > temp)
                    {
                        array[j] = array[j - gap];
                        j -= gap;
                    }

                    array[j] = temp;
                }

                // 缩小增量
                gap /= 2;
            }
        }

        public static void ShellSortRun()
        {
            int[] array = { 19, 20, 22, 32, 34, 50, 99, 49, 1, 11, 11, 55, 35, 93, 96, 71, 70, 38, 78, 48 };

            Console.WriteLine("排序前数组:" + string.Join(", ", array));

            ShellSort(array);

            Console.WriteLine("排序后数组:" + string.Join(", ", array));
        }

运行结果

相关推荐
Wang's Blog3 分钟前
Java框架 SpringCloud 快速入门: Gateway 路由的过滤器配置
java·spring cloud·gateway
罗湖老棍子6 分钟前
荒岛野人(信息学奥赛一本通- P1637)(洛谷-P2421)
算法·数论·枚举·裴蜀定理·扩展欧几里得·扩展中国剩余定理
朝朝辞暮i10 分钟前
C++ 第 40 章:ROS2 Publisher + Timer + Subscriber + Callback + Executor 完整闭环
开发语言·c++·算法·ros2
400分18 分钟前
具身智能系列之从零到「机械臂会放试管」:π0.5 VLA 真机部署完全指南【第一节】
算法
迅猛龙办公室26 分钟前
python实现简单进度条
java·前端·python
小宋102128 分钟前
一套服务托管多个 LoRA:适配器加载、租户隔离与热切换实战
大数据·人工智能·算法
斯内普吖32 分钟前
(开源)宠物饲养系统实战指南 基于 Java + SSM + Vue + MySQL
java·vue.js·mysql·开源·宠物
知守观35 分钟前
Spring Boot 2.1 → 3.5 迁移推演:这个 2018 年的项目会炸在哪
java·spring boot
Rosanci37 分钟前
Codex 下载与本地部署实战:从安装到运行全流程指南
开发语言·前端·算法·chatgpt·codex
Flynt38 分钟前
800KB 的 JSON 吃掉 8.5 秒 CPU:jackson 这波修复里,最容易被漏掉的洞藏在字符串里
java·安全