概要
-IDE:Pycharm
-Python版本:python3.x
-算法分类:内部排序->插入类排序->希尔排序
算法思想
希尔排序又称缩小增量排序法,是一种基于插入思想的排序方法。它利用了直接插入排序的最佳性质,首先,将待排序的关键字序列分成若干个较小的序列,对子序列进行直接的插入排序,使整个待排序列排好序。
过程如下:
1.首先选定记录间的距离di(i=1)di(i=1),在整个待排序记录序列中将所有间隔为d1d1的记录分成一组,进行组内直接插入排序。
2.然后选取i=i+1i=i+1,记录间的距离为di(di<di−1)di(di<di−1),在整个待排序记录序列中,将所有间隔为didi的记录分成一组,进行组内直接插入排序。
3.重复步骤2直至记录间的距离di=1di=1,此时整个只有一个子序列,对该序列进行直接插入排序,完成整个排序过程。
算法要点
增量取法
关于增量dd的取法,最初希尔提出取,再取d=[d/2]d=[d/2],直到d=1d=1为止。该思路的缺点是,奇数位置的元素在最后一步才会与偶数位元素进行比较,使得排序效率低。后来Knuth提出d=[d/3]+1d=[d/3]+1。此外还有多种取法,但无法证明那种最优。
逆转数
为了分析希尔排序的优越性,这里引入逆转数的概念。对于待排序列中的某个记录的关键字,它的逆转数是指在它之前比此关键字大的关键字个数。
假设:被调换位置的两个关键字之间有ll个介于两个关键字之间的数。逆转数之和一定会减小
当逆转数为00时则表明整个排序完成。