C语言植物大战数据结构希尔排序算法

C语言植物大战数据结构希尔排序算法

什么是希尔排序

希尔排序是一种基于插入排序的排序算法,也叫做“缩小增量排序”。和插入排序不同的是,希尔排序的插入排序是对一定间隔的元素进行插入排序,而不是对数组中相邻的元素进行排序。

希尔排序的流程和方法

希尔排序的主要流程是根据元素间的间隔d,分组进行插入排序,依次减小d值。最后当d=1的时候,再按照插入排序的方法对整个数组进行一次排序。希尔排序的时间复杂度为O(n^(3/2))。

下面是代码块,演示希尔排序的方法实现:

void shellSort(int arr[], int n) 
{ 
    for (int gap = n / 2; gap > 0; gap /= 2) { 
        for (int i = gap; i < n; i += 1) { 
            int temp = arr[i]; 
            int j; 
            for (j = i; j >= gap && arr[j - gap] > temp; j -= gap) 
                arr[j] = arr[j - gap]; 

            arr[j] = temp; 
        } 
    } 
} 

希尔排序的示例

下面用两个示例来进一步说明希尔排序的过程。

示例一:

假设待排序数组为:7 5 3 2 8 1 9 6 4

首先,将数列按照下标间隔d分成若干组,假设d=4,我们将数组拆分成下面这些分组:

7 8

5 1

3 9

2 6

4

然后对每个分组进行插入排序,插入排序之后数组变为:

4 1

5 6

3 8

2 9

7

然后将间隔缩小一半,假设d=2,我们将数组拆分成下面这些分组:

4 3 7

1 8

5 2 9

6

然后对每个分组进行插入排序,插入排序之后数组变为:

4 1 2

3 8 9

7 5 6

然后将间隔缩小为1,进行插入排序,最终得到排序后的数组:

1 2 3 4 5 6 7 8 9

示例二:

假设待排序数组为:66 34 33 45 24 23 12 10 7

首先,将数列按照下标间隔d分成若干组,假设d=5,我们将数组拆分成下面这些分组:

66 23

34 12

33 10

45 7

24

然后对每个分组进行插入排序,插入排序之后数组变为:

24 23

34 7

33 10

45 12

66

然后将间隔缩小一半,假设d=2,我们将数组拆分成下面这些分组:

24 33 66

23 12 34

7 10 45

然后对每个分组进行插入排序,插入排序之后数组变为:

7 10 34

23 12 45

24 33 66

然后将间隔缩小为1,进行插入排序,最终得到排序后的数组:

7 10 12 23 24 33 34 45 66

总结

希尔排序是一种比较简单的排序算法,其主要是通过对数组进行分组,然后对每个分组进行插入排序,最终在缩小间隔的过程中,使整个数组有序。希尔排序的时间复杂度是O(n^(3/2)),比起选择排序和冒泡排序等算法有较大的优越性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言植物大战数据结构希尔排序算法 - Python技术站

(0)
上一篇 2023年5月17日
下一篇 2023年5月17日

相关文章

  • java数据结构之实现双向链表的示例

    Java数据结构之实现双向链表的示例 1. 什么是双向链表? 双向链表,英文名为doubly linked list,是一种链表结构。与单向链表不同,双向链表中的每一个节点除了保存了指向下一个节点的指针外,还保存了指向前一个节点的指针。因此,双向链表可双向遍历,可以从前向后或从后向前遍历。 2. 双向链表的实现 2.1 节点类的实现 创建节点类Node,并定…

    数据结构 2023年5月17日
    00
  • Java数据结构之优先级队列(堆)图文详解

    Java数据结构之优先级队列(堆)图文详解 什么是优先级队列(堆) 优先级队列(堆)是一种非常重要的数据结构,它能够更好地管理数据,分配任务等。优先级队列的本质就是一种特殊的队列,它是一种可以根据元素的优先级来出队的数据结构。 通常情况下,队列中存储了一系列具有优先级的数据。当我们从队列中取出元素时,优先级高的元素会先出队。因此,我们需要一种数据结构,来对这…

    数据结构 2023年5月17日
    00
  • Halcon学习教程(一) 之提取十字线中心 图像分割

      原文作者:aircraft   原文链接:https://www.cnblogs.com/DOMLX/p/17266405.html      废话不多说,因为毕业后工作原因比较忙,好久没更新博客了,直接上图。。。     上图有个十字线,我们要提取出十字线的中心(Hhhh这个线是我随手画的 没画直!!) 第一步:肯定是读取图像进行灰度提取处理啦。   …

    算法与数据结构 2023年4月18日
    00
  • java 数据结构之栈与队列

    Java 数据结构之栈与队列 什么是栈? 栈是一种根据先进后出(LIFO)原则的数据结构,即最后压入的元素最先弹出。栈可以用数组或链表实现。栈的两个基本操作是 push(入栈)和 pop(出栈)。 栈的特性 只允许在栈的顶部插入和删除元素。 操作受限只能从一端进行。 元素的插入和删除时间复杂度都为 O(1)。 栈的示例 以下是使用 Java 语言实现栈的示例…

    数据结构 2023年5月17日
    00
  • C语言线性表的链式表示及实现详解

    C语言线性表的链式表示及实现详解 什么是线性表 线性表是一种在计算机科学中常见的数据结构,它由一组连接在一起的元素组成,每个元素都包含前后指针以指向相邻的元素,从而构成一个连续的线性序列。线性表可以用来存储和处理一般数据集合。 链式存储结构 线性表的链式存储结构是由若干个结构体组成的链表,每个结构体都称为一个节点。每个节点包含两个字段:一个数据域用来存放数据…

    数据结构 2023年5月17日
    00
  • 快速排序(整数)的C语言代码和JAVA代码

    一、问题描述 我们目前有一些数据,这些数据都是整数,然后我们现在需要做的就是把这些数据按照小到大排一下,然后输出出来。 二、问题的解决办法 首先确认一下分界点,我们常见的分界点是第一个点,第二个点,中间的一个点; 然后我们调整一下范围,也就说所有小于等于某个点的值在左半边,大于等于某个点的值在右半边。 递归处理左右两端。 案例如下: 我们首先手头有一些数据,…

    算法与数据结构 2023年4月18日
    00
  • NTP时间同步服务器(频率同步)包含帧同步、载波同步、位同步

    NTP时间同步服务器(频率同步)包含帧同步、载波同步、位同步 NTP时间同步服务器(频率同步)包含帧同步、载波同步、位同步 京准电子科技官微——ahjzsz 同步的概念   同步技术是数字通信系统中非常重要的技术。一般来说数字通信系统要实现多种同步功能才能实现正确的数据通信任务。其技术目标是实现不同地域收发双方的同步通信互联,实现一致的信息数据交换,因此,通…

    算法与数据结构 2023年4月17日
    00
  • 【ACM算法竞赛日常训练】DAY3题解与分析【旅游】【tokitsukaze and Soldier】

    DAY3共2题: 旅游 tokitsukaze and Soldier ? 作者:Eriktse? 简介:19岁,211计算机在读,现役ACM银牌选手?力争以通俗易懂的方式讲解算法!❤️欢迎关注我,一起交流C++/Python算法。(优质好文持续更新中……)?? 原文链接(阅读原文获得更好阅读体验): 旅游 题目传送门:https://ac.nowcoder…

    算法与数据结构 2023年4月18日
    00
合作推广
合作推广
分享本页
返回顶部