第八章 排序 三、希尔排序

目录

 一、算法思想

二、例子

三、代码实现

五、验证

六、空间复杂度

七、时间复杂度

八、稳定性


 一、算法思想

先追求表中元素部分有序,在逐渐逼近表中元素全部有序。

二、例子

1、我们要升序排列此表

第八章 排序 三、希尔排序_第1张图片

2、取一个差值作为子表的划分的条件,希尔本人建议d=n/2,在本例题中表示为d=8/2=4

于是,我们将相距为4的元素分配到一个子表。

第八章 排序 三、希尔排序_第2张图片

3、分别对它们进行插入排序

第八章 排序 三、希尔排序_第3张图片

第八章 排序 三、希尔排序_第4张图片

4、将d除以2,得到新的间距,并得到新的子表

第八章 排序 三、希尔排序_第5张图片

5、再次进行插入排序

第八章 排序 三、希尔排序_第6张图片

6、再次缩小d的值,此时d为1,将整个表整合,并进行插入排序,得到最后结果

第八章 排序 三、希尔排序_第7张图片

三、代码实现

#include "bits/stdc++.h"
using namespace std;

void ShellSort(int a[],int n){
    int d,i,j,temp;
    for (d = n/2; d >= 1; d=d/2) {//每次的步长不一样
        for (i = d; i <=n ; ++i) {//从第一个d开始
            if (a[i]=0 && temp

五、验证

第八章 排序 三、希尔排序_第8张图片

六、空间复杂度

O(1);

七、时间复杂度

八、稳定性

第八章 排序 三、希尔排序_第9张图片

你可能感兴趣的:(数据结构)