(3333)希尔排序
基本原理:希尔排序也一种插入排序类的方法,由于直接插入排序序列越短越好,源
序列的排序度越好效率越高。Shell 根据这两点分析结果进行了改进,将待排记录序列以一
定的增量间隔 dk 分割成多个子序列,对每个子序列分别进行一趟直接插入排序, 然后逐步
减小分组的步长 dk,对于每一个步长 dk 下的各个子序列进行同样方法的排序,直到步长为
1 时再进行一次整体排序。因为不管记录序列多么庞大,关键字多么混乱,在先前较大的分组
步长 dk 下每个子序列的规模都不大,用直接插入排序效率都较高。尽管在随后的步长 dk 递
减分组中子序列越来越大,但由于整个序列的有序性也越来越明显,则排序效率依然较高。
这种改进抓住了直接插入排序的两点本质,大大提高了它的时间效率。
效率分析:希尔排序有以下几个关键特性:
(1) 希尔排序的核心是以某个增量 dk 为步长跳跃分组进行插入排序,由于分组的步长 dk
逐步缩小,所以也叫“缩小增量排序”插入排序。其关键是如何选取分组的步长序列才能使
得希尔方法的时间效率最高;
(2) 待排序列记录的个数 n 、跳跃分组步长逐步减小直到为 1 时所进行的扫描次数 T、增量
的和、记录关键字比较的次数以及记录移动的次数或各子序列中的反序数等因素都影响希尔
算法的时间复杂度:其中记录关键字比较的次数是重要因素,它主要取决于分组步长序列的
选择;
(3) 希尔方法是一种不稳定排序算法,因为其排序过程中各趟的步长不同,在第 k 遍用 dk
作为步长排序之后,第 k +1 遍排序时可能会遇到多个逆序存在,影响排序的稳定性。
|