希尔排序时间复杂度 希尔排序( 二 )


不同的步长序列,执行效率也不同
1、选择一个增量序列t1,t2,…,tk,其中对于ij,有titj,tk=1;(增量因子有多种取法,最简单的是t(i+1) = ti/2)
2、按增量序列个数k,对序列进行k 趟排序;
3)每趟排序,根据对应的增量ti,将待排序列分割成若干长度为m 的子序列,分别对各子表进行直接插入排序 。仅增量因子为1 时,整个序列作为一个表来处理,表长度即为整个序列的长度 。
**希尔排序的执行时间依赖于增量序列 。**
希尔排序耗时的操作有:比较 + 后移赋值 。
时间复杂度情况如下:(n指待排序序列长度)
希尔排序是按照不同步长对元素进行插入排序,当刚开始元素很无序的时候,步长最大,所以插入排序的元素个数很少,速度很快;当元素基本有序了,步长很小,插入排序对于有序的序列效率很高 。所以,希尔排序的时间复杂度会比O(n2)好一些 。
希尔算法的性能与所选取的增量(分组长度)序列有很大关系 。只对特定的待排序记录序列,可以准确地估算比较次数和移动次数 。想要弄清比较次数和记录移动次数与增量选择之间的关系,并给出完整的数学分析,至今仍然是数学难题 。
希尔算法在最坏的情况下和平均情况下执行效率相差不是很多,与此同时快速排序在最坏的情况下执行的效率会非常差 。希尔排序没有快速排序算法快,因此中等大小规模表现良好,对规模非常大的数据排序不是最优选择 。
(注:专家们提倡,几乎任何排序工作在开始时都可以用希尔排序,若在实际使用中证明它不够快,再改成快速排序这样更高级的排序算法 。)
由于多次插入排序,我们知道一次插入排序是稳定的,不会改变相同元素的相对顺序,但在不同的插入排序过程中,相同的元素可能在各自的插入排序中移动,最后其稳定性就会被打乱,所以希尔排序是不稳定的 。
备注:希尔排序的时间性能优于直接插入排序
参考文章
经典排序算法(5)——希尔排序算法详解
排序:希尔排序(算法)
什么是希尔排序希尔排序(Shell Sort)是插入排序的一种 。是针对直接插入排序算法的改进 。该方法又称缩小增量排序,因DL.Shell于1959年提出而得名 。
希尔排序基本思想:
先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成(n除以d1)个组 。所有距离为d1的倍数的记录放在同一个组中 。先在各组内进行直接插入排序;然后,取第二个增量d2d1重复上述的分组和排序,直至所取的增量dt=1(dtdt-l…d2d1),即所有记录放在同一组中进行直接插入排序为止 。
该方法实质上是一种分组插入方法 。
给定实例的shell排序的排序过程
假设待排序文件有10个记录,其关键字分别是:
49,38,65,97,76,13,27,49,55,04 。
增量序列的取值依次为:
【希尔排序时间复杂度 希尔排序】5,3,1

秒懂生活扩展阅读