前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【愚公系列】2021年11月 C#版 数据结构与算法解析(插入排序-希尔排序)

【愚公系列】2021年11月 C#版 数据结构与算法解析(插入排序-希尔排序)

作者头像
愚公搬代码
发布2021-12-03 16:41:27
1780
发布2021-12-03 16:41:27
举报
文章被收录于专栏:历史专栏

1、希尔排序(Shell Sort)

1959年Shell发明,第一个突破O(n2)的排序算法,是简单插入排序的改进版。它与插入排序的不同之处在于,它会优先比较距离较远的元素。希尔排序又叫缩小增量排序。

1.1 算法描述

先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,具体算法描述:

  • 选择一个增量序列t1,t2,…,tk,其中ti>tj,tk=1;
  • 按增量序列个数k,对序列进行k 趟排序;
  • 每趟排序,根据对应的增量ti,将待排序列分割成若干长度为m 的子序列,分别对各子表进行直接插入排序。仅增量因子为1 时,整个序列作为一个表来处理,表长度即为整个序列的长度。

1.2 动图演示

在这里插入图片描述
在这里插入图片描述

1.3 代码实现

代码语言:javascript
复制
/// 
/// 希尔排序
/// 
public class Program {

    public static void Main(string[] args) {
        int[] array = { 43, 69, 11, 72, 28, 21, 56, 80, 48, 94, 32, 8 };
        int[] gaps = { 5, 3, 1 };

        for (int i = 0; i < gaps.Length; i++) {
            ShellsSort(array, gaps[i]);
        }
        ShowSord(array);

        Console.ReadKey();
    }

    private static void ShowSord(int[] array) {
        foreach (var num in array) {
            Console.Write($"{num} ");
        }
        Console.WriteLine();
    }

    public static void ShellsSort(int[] array, int gap) {
        int length = array.Length;
        for (int i = 0; i < gap; i++) {
            for (int j = i + gap; j < length; j += gap) {
                if (j < length) {
                    if (array[j] < array[j - gap]) {
                        int sentinel = array[j];
                        int k = 0;
                        for (k = j - gap; k >= i && sentinel < array[k]; k -= gap) {
                            array[k + gap] = array[k];
                        }
                        array[k + gap] = sentinel;
                    }
                }
            }
        }
    }

}

1.4 算法分析

希尔排序的核心在于间隔序列的设定。既可以提前设定好间隔序列,也可以动态的定义间隔序列。动态定义间隔序列的算法是《算法(第4版)》的合著者Robert Sedgewick提出的。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/08/24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、希尔排序(Shell Sort)
  • 1.1 算法描述
  • 1.2 动图演示
  • 1.3 代码实现
  • 1.4 算法分析
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档