Code前端首页关于Code前端联系我们

希尔排序算法,C语言示例代码详解

terry 2年前 (2023-09-27) 阅读数 76 #数据结构与算法
  1. 复杂性和稳定性

算法时间复杂度

最坏情况:O(n^2)

最好情况:O(n) : O(n ^2 )

稳定性:排序不稳定

2。流程介绍

希尔排序又称为降序增量排序算法,是一种不稳定但效率更高的插入排序在操作近排序数据时效率极高,即可以达到线性排序的效率。直接插入排序总体上效率较低,因为插入排序一次只能移动数据一步。少量;

希尔排序的基本思想是:首先将整个待排序记录序列分割成若干子序列进行直接插入排序。当整个序列中的记录“基本有序”时,那么所有记录都已排序。直接插入排序。

过程如下:

  1. 选择一个增量序列t1,t2,...,tk,其中ti > tj,tk = 1;
  2. 根据增量序列数k对序列进行k次排序;
  3. 在每次排序过程中,将待排序的列按照对应的增量十分成若干个长度为m的子序列,并对每个子表进行直接插入排序。只有当增量因子为1时,才将整个序列视为一个表,表的长度就是整个序列的长度。
  1. 流程图示
第一遍 1050302070704060
第二遍 1020305040607070
第三遍 1020304050607070
第四遍 1020304050607070

可以看到,与直接插入pass相比,每遍都可以进行分段操作,整体效率较高。

4。相关代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

#include

using namespace std;

void shellSort(int arr[], int n) {

int i, j, gap; = n / 2;间隙 > 0;间隙/= 2) {

对于 (i = 0; i 对于 (j = i + 间隙; j -间隙], arr[k]);

0.30, 20,10,70,40 ,60};

int n=8;

shellSort(a,n);

for (int i=0; i

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

热门