希尔排序 Shell’s Sort

我们都知道直接插入排序对有序度高的列表排序效率是比较高的。而当列表为倒序时,最后一位元素的值是最小的,直接插入排序会进行 n-1 次比较才能找到正确的位置。这种情况下直接插入排序的效率是很低的
希尔排序是改进的直接插入排序,也称为缩小增量排序

希尔排序的基本思路:

把列表元素按下表的一定增量分组,对每组分别使用直接插入排序


这种做法成功的把大规模的有序度较低的数组转换成了小规模的有序度高的数组,因此直接插入排序的效率提高了

实现:

希尔排序的思路就是将大数组转化为小数组,分别插入排序后转化为有序度相对较高的数组,再利用插入排序

希尔排序的本质还是插入排序,但是通过将数组巧妙分割,恰好利用了插入排序对小数组和有序度高的数组效率高的特点

public static void shellSort1(int[] arr) {int gap = arr.length / 2;System.out.println(Arrays.toString(arr));while (gap > 0) {for (int i = gap; i < arr.length; i++) {int j = i;int temp = arr[j];while (j - gap >= 0 && temp < arr[j - gap]) {// 移动arr[j] = arr[j - gap];j -= gap;}arr[j] = temp;}// 打印System.out.println(Arrays.toString(arr));gap /= 2;}
}

时间复杂度:

希尔排序的时间复杂度和增量序列(即 gap 的大小)有关,因此非常复杂

例如 {1, 2, 4, 8, … }这个序列的最坏时间复杂度为 O(n)

{1, 3, 7, 2 (k)-1, … } 的最坏时间复杂度为 O(n^{1.5})

{1, 5, 19, 41, 109, … } 的最坏时间复杂度为 O(n^{1.3})

空间复杂度:

由于只用到了 1 个临时变量,所以空间复杂度为O(1)

稳定性:

虽然插入排序是稳定的,但是希尔排序是多个插入排序交叉,所以可能破坏稳定性

相关章节
第一节 简述
第二节 稀疏数组 Sparse Array
第三节 队列 Queue
第四节 单链表 Single Linked List
第五节 双向链表 Double Linked List
第六节 单向环形链表 Circular Linked List
第七节 栈 Stack
第八节 递归 Recursion
第九节 时间复杂度 Time Complexity
第十节 排序算法 Sort Algorithm
第十一节 冒泡排序 Bubble Sort
第十二节 选择排序 Select Sort
第十三节 插入排序 Insertion Sort
第十四节 冒泡排序,选择排序和插入排序的总结
第十五节 希尔排序 Shell’s Sort
第十六节 快速排序 Quick Sort
第十七节 归并排序 Merge Sort

算法与数据结构(希尔排序)相关推荐

  1. python算法与数据结构-希尔排序算法(35)

    阅读目录 一.希尔排序的介绍 二.希尔排序的原理 三.希尔排序的图解 四.希尔排序的python代码实现 五.希尔排序的C语言实现 六.希尔排序的时间复杂度 七.希尔排序的稳定性 一.希尔排序的介绍 ...

  2. python算法与数据结构-希尔排序算法

    希尔排序(shell sort)是插入排序的一种,也称缩小增量排序,与普通的插入算法的区别就是gap步长. 希尔排序内层循环逻辑如下所示: 上面的可以分为4组,一个一个的按照插入算法来做,第一组有54 ...

  3. js排序算法详解-希尔排序

    全栈工程师开发手册 (作者:栾鹏) js系列教程5-数据结构和算法全解 js排序算法详解-希尔排序 希尔排序,直接上图: 像这个算法看图理解起来并不是很难,就像比赛一样,1-6一组,2-7一组,每差5 ...

  4. Hark的数据结构与算法练习之希尔排序

    算法说明 希尔排序是插入排序的优化版. 插入排序的最坏时间复杂度是O(n2),但如果要排序的数组是一个几乎有序的数列,那么会降低有效的减低时间复杂度. 希尔排序的目的就是通过一个increment(增 ...

  5. 【数据结构----笔记5】插入排序算法之【希尔排序算法】

    /*__________________________________________________________________________________________________ ...

  6. 算法系列【希尔排序】篇

    常见的内部排序算法有:插入排序.希尔排序.选择排序.冒泡排序.归并排序.快速排序.堆排序.基数排序等.用一张图概括: 关于时间复杂度: 1.     平方阶 (O(n2)) 排序各类简单排序:直接插入 ...

  7. 算法结构2.希尔排序

    希尔是一个人的名字,因为他在论文中首次提到了这样的排序方式,这是希尔排序的来源 希尔排序,比插入排序有更加的优化, 有很多的文章中说希尔排序中也用到了插入排序,这样的说法只是为了方便理解,其实是不正确 ...

  8. 希尔排序是一种稳定的排序算法_全面解析十大排序算法之四:希尔排序

    点击上方蓝字关注我们吧 1. 十种排序算法的复杂度和稳定性 时间复杂度:一个算法消耗所需要的时间 空间复杂度:运行一个算法所需要的内存时间 稳定性:如一个排列数组:1.4.5.6.4.7. 此时有一对 ...

  9. [数据结构] 希尔排序

    概述 希尔排序法(缩小增量法) 属于插入类排序,是将整个无序列分割成若干小的子序列分别进行插入排序的方法. 把记录按下标的一定增量分组,对每组使用直接插入排序算法排序:随着增量逐渐减少,每组包含的关键 ...

  10. 算法与数据结构(排序算法概述)

    排序算法 Sort Algorithm 排序算法是将一系列数据根据指定的顺序进行排列的过程 排序算法的分类: 内部排序:指将需要处理的所有数据都加载到内存中进行排序 插入排序 直接插入排序 希尔排序 ...

最新文章

  1. Computer Science Theory for the Information Age-3: 高维空间中的高斯分布和随机投影
  2. 安装好Pycharm后如何配置Python解释器简易教程
  3. 关于QMap的几点总结思考
  4. 一个物理学家学习Windows编程的感受
  5. linux ap程序,ubuntu(linux)无线网卡开启/关闭wifi(AP)
  6. ASP.NET Core 生成验证码
  7. powerCat进行常规tcp端口转发
  8. 《需求工程——软件建模与分析》阅读笔记之一
  9. 如何完成一个深度学习的模型
  10. (自用)Linux系统彻底卸载MySQL数据库
  11. 软件测试到底要不要报培训班?
  12. 编程题目3——中国大学mooc(这篇博客更新完毕)
  13. 电商3D展示360全景展示可以突出产品优势
  14. 基于tiny4412的u-boot移植(二)_ git clone
  15. angular实现双向绑定
  16. Linux学习 高级网络配置
  17. 关于高通QPST平台功能和选项的一些简单说明
  18. python输入一个字符一个数字_Python程序输入一个字符串并查找字母和数字的总数...
  19. Qt编写地图综合应用49-地图类型(街道图、卫星图)
  20. 嵌入式操作系统课程作业之Write OS

热门文章

  1. 怎么打开网卡rss_电脑任务栏右下角宽带图标提示网络电缆没插好怎么办?
  2. java中的快速生成代码
  3. SharedPreferences记住用户密码 态判断应用是否首次启动等
  4. pandas 提取股票价格
  5. Leetcode 415. 字符串相加 (每日一题 20210826 同类型题)
  6. pytorch线性模型的基础使用
  7. MAS 714课程笔记12: 线性规划
  8. Linux疑难杂症解决方案100篇(十八)-Linux 或 Windows 上实现端口映射
  9. Python零碎知识(6):split 和 join
  10. Python入门100题 | 第020题