可以用逆序数来理解,假设我们要从小到大排序,一个数组中取两个元素如果前面比后面大,则为一个逆序,容易看出排序的本质就是消除逆序数,可以证明对于随机数组,逆序数是O(N^2)的,而如果采用“交换相邻元素”的办法来消除逆序,每次正好只消除一个,因此必须执行O(N^2)的交换次数,这就是为什么冒泡、插入等算法只能到平方级别的原因,反过来,基于交换元素的排序要想突破这个下界,必须执行一些比较,交换相隔比较远的元素,使得一次交换能消除一个以上的逆序,希尔、快排、堆排等等算法都是交换比较远的元素,只不过规则各不同罢了

原文链接:https://www.zhihu.com/question/24637339/answer/84079774

希尔排序的时间复杂度为什么能小于O(n^2)相关推荐

  1. 排序算法 之希尔排序及时间复杂度分析

    排序算法之 冒泡排序及性能优化(时间复杂度+空间复杂度分析) 排序算法之 简单选择排序及时间复杂度分析 排序算法之 直接插入排序及时间复杂度分析 希尔排序 算法思想:将整个待排序列分割成若干个子序列( ...

  2. java数组希尔排序及时间复杂度

    希尔排序是由插入排序延伸而来的,因为插入排序的最后一个数要是最小数就要把它一步一步的插入到最前面,太浪费时间,所以希尔排序是对他进行分组,让它们每次隔一半进行交换(即每次相邻数组长度一半的两个数进行比 ...

  3. 希尔排序、快速排序、归并排序的实现分析以及时间复杂度

    高级排序 希尔排序 快速排序 归并排序 希尔排序 希尔排序是插入排序的一种,又称"缩小增量排序",是插入排序算法的一种更高效的改进版本. 我在另一篇文章中说插入排序的时候,会有一个 ...

  4. (排序3)希尔排序时间复杂度与直接选择排序

    TIPS 希尔排序分组预排的目的就在于比如说我要对数据进行升序排序,那么就是可以达到让大的数尽快的调到后面 然后接下来随着gap的不断缩小,间隔越来越小,组也就越来越多,最终整个数组的话是越来越接近有 ...

  5. 数据结构第一课:希尔排序和选择排序的时间复杂度随机数组的生成

    随机生成数组 #include <iostream> #include <algorithm> #include<ctime> #include<time.h ...

  6. 插入排序,希尔排序,堆排序

    本文将介绍三种排序算法--插入排序,希尔排序,堆排序.本文所有例子都是使用升序 一.插入排序 算法思想 维护一个有序数组,将要插入的数据与有序数组自最后一个元素直到合适位置的数一一比较. eg: 有序 ...

  7. 那些年我们排过的序之希尔排序

    基本思想 先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组.所有距离为d1的倍数的记录放在同一个组中.先在各组内进行直接插入排序:然后,取第二个增量d2<d1重复上述的分组和 ...

  8. 【数据结构-排序】1. 图解插入排序三种实现(插入排序/折半排序/希尔排序)

    直接插入排序(插入排序) 排序思想 对于一个数组 A[0,n] 的排序问题,假设认为数组在 A[0,n-1] 排序的问题已经解决了. 考虑 A[n] 的值,从右向左扫描有序数组 A[0,n-1] ,直 ...

  9. 【算法知识】详解希尔排序算法

    前言 已发布: [算法知识]详解选择冒泡算法 [算法知识]详解选择排序算法 [算法知识]详解插入排序算法 当待插入元素是一个很小(当需求是从小到大排序时,从大到小排序时此处为很大)直接插入排序需要移动 ...

最新文章

  1. jquerymobile在手机上很小_手机充电时按这个键,充电快很多!
  2. 腾讯最新开源项目登上GitHub热榜:QQ音乐等18项业务都在用,日均PV过亿
  3. cylance做的机器学习相关材料汇总
  4. Java-COW在Java中的应用
  5. 用于Power BI Desktop中的库存数据分析的烛台图
  6. Hyperledger Fabric教程(6)-- byfn.sh分析-peer-base.yaml
  7. 捷达vs7测试_没有大众车标的光环,捷达VS7显得更厚道,看看是不是你的菜
  8. 千牛机器人回复词库_千牛机器人自动回复语大全
  9. 好程序员web前端培训分享JavaScript学习笔记ajax及ajax封装
  10. c语言口袋妖怪代码大全,口袋妖怪银版金手指代码使用大全
  11. web前端开发主要课程,jquery源码实现原理
  12. Troubleshooting Office Web Apps with SharePoint 2013
  13. 会计 应用计算机,会计从业会计电算化:计算机的主要应用
  14. 一篇关于 JS 常用的数据结构与算法万字总结
  15. Access和VBA
  16. Word~Word修改行间距磅值
  17. ioctl(sock, SIOCGIFHWADDR, ifr)获取网卡mac地址
  18. html中 cookie设置
  19. 码图 126 求n!
  20. 吴昊品工程级别软件项目 Round 3 —— Mobile Safe(for android)

热门文章

  1. Authing 背后的计算哲学
  2. mac安装python虚拟环境_mac 下 python 虚拟环境的安装和配置
  3. 网站设计公司有哪些?如何找到可靠的网站设计公司?
  4. 美团校招年薪35万!老员工薪资倒挂,如何应对?
  5. Python无框架分布式爬虫,爬取范例:拼多多商品详情数据,拼多多商品列表数据
  6. allegro使用汇总
  7. 商品属性的选择功能的实现
  8. 关于 android 远程控制(pc 控制手机)
  9. Google play中下载apk
  10. 强化学习中的基础概念和术语——spinning up文档翻译