首页 > 编程语言 >C#希尔排序算法

C#希尔排序算法

时间:2023-09-09 15:44:55浏览次数:51  
标签:C# 插入排序 gap int 希尔 序列 array 排序

前言

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

希尔排序实现原理

  1. 首先要确定一个增量序列(初始间隔),将待排序序列分成多个子序列。
  2. 对每个子序列分别进行插入排序,即在子序列内部进行排序。
  3. 逐步减小增量,重复步骤2,直到增量为1,即完成最后一次插入排序,排序完成。

希尔排序动态图解

希尔排序代码实现

        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));
        }

运行结果

参考文章

排序算法图解:https://cloud.tencent.com/developer/article/1502452

标签:C#,插入排序,gap,int,希尔,序列,array,排序
From: https://www.cnblogs.com/Can-daydayup/p/17689566.html

相关文章

  • 无涯教程-JavaScript - IMSUM函数
    描述IMSUM函数以x+yi或x+yj文本格式返回两个或多个复数的和。当添加复数时,实数和虚数系数分别相加,即找到两个复数a+bi和c+di的和的方程为-(a+bi)+(c+in)=(a+c)+(b+d)我语法IMSUM(inumber1,[inumber2]...)争论Argument描述Required/OptionalInumb......
  • 排序总结 链表
    排序总结时间复杂度空间复杂度是否能有稳定性选择O(N*N)O(1)×冒泡O(N*N)O(1)✔️插入O(N*N)O(1)✔️归并O(N*logN)O(N)✔️快排(一般指3.0)O(N*logN)O(N*logN)×堆O(N*logN)O(1)×基数排序作为不基于比较的排序,有稳定性基础类型的排序一般排序用快排,因为其时间复杂度常数项更小,需要保持......
  • C#扩展方法的使用
    C#中的扩展方法(ExtensionMethods)是一种强大的功能,它允许您向现有的类型(包括.NETFramework中的类型)添加新方法,而无需修改这些类型的源代码。扩展方法通常用于扩展框架或库中的类,以便使其适应您的特定需求,而不必创建子类或修改原始类。以下是使用扩展方法的一般步骤:创建一个静......
  • linux gcc rpath
    linux下程序运行时如果想要到指定路径下查找依赖库,除了使用LD_LIBRARY_PATH,还可以使用编译选项rpath:g++-Wl,-rpath='$ORIGIN/libs'-omainmain.cpp-L.-lmylib那么只要把libmylib.so放到libs目录下,main即可正常执行。如果是在QT中,则改为:QMAKE_LFLAGS+="-Wl,-rpath='\$......
  • Windows平台 CLion 远程调试 Linux 的 C++ 程序
    Windows平台CLion远程调试Linux的C++程序1.CLion的安装Pass2.Linux环境的配置2.1.安装gdbserver这里举例Ubuntu环境下的安装:sudoapt-getinstallgdbserver2.2配置CLion2.2.1.配置Toolchains首先在CLion的File->Settings->Tools->SSHConfigu......
  • Spring,SpringMVC,SpringBoot,SpringCloud有什么区别?
    讲一讲Spring、SpringMVC、SpringBoot、SpringCloud之间的关系?Spring是核心,提供了基础功能;SpringMVC是基于Spring的一个MVC框架;SpringBoot是为简化Spring配置的快速开发整合包;SpringCloud是构建在SpringBoot之上的服务治理框架。Spring一般说Spring框架指......
  • 解析排序算法:十大排序方法的工作原理与性能比较
    当我们面临对数据进行排序的任务时,计算机科学家们开发了多种排序算法来满足不同的需求。这些排序算法各具特点,适用于不同规模和类型的数据集。在本文中,我们将介绍十大常见的排序算法,并讨论它们的工作原理、时间复杂度以及适用场景。1.冒泡排序(BubbleSort)冒泡排序是最简单的排序算......
  • Scrapy深入使用_存储
    目录Scrapy深入使用-存储scrapy的深入使用学习目标:1、了解scrapy的debug信息2、了解scrapyShell3、settings.py中的设置信息3.1为什么项目中需要配置文件3.2配置文件中的变量使用方法3.3settings.py中的重点字段和含义4、pipeline管道的深入使用4.1使用终端命令行进行存储4.2......
  • 无涯教程-JavaScript - IMSUB函数
    描述IMSUB函数以x+yi或x+yj文本格式返回两个复数的差。减去复数时,实数和虚数系数分别相减,即从复数a+bi中减去复数c+di的方程为-(a+bi)-(c+in)=(a-c)+(b-d)我语法IMSUB(inumber1,inumber2)争论Argument描述Required/OptionalInumber1Thecomplexnumb......
  • SY2023CTF--“安洵杯”全国精英赛MISC--烦人的压缩包
    前言:由于最近要比第二届技能大赛CTF就玩的少(我很菜,求大佬带)随便看看做了一题那个数独也简单不敢兴趣就run了烦人的压缩包:首先下载下来一个压缩包需要密码直接爆破一下使用工具:Ziperello得到密码:645321解压打开得到两个文件hint.txt和love.jpg放入010Editor发现是有......