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