希尔排序是一种插入排序算法,其核心思想是缩小增量排序。希尔排序在数组中采用跳跃式分组的策略,通过某个增量将数组元素划分为若干组,然后分组进行插入排序,随后逐步缩小增量,继续按组进行插入排序操作,直至增量为1(最后一趟是直接插入排序)。希尔排序的每一趟排序都会使整个序列变得有序,小的基本在前,大的基本在后。等到整个序列有序了,那么再使用增量为1的插入排序的话那么就会使得排序的效率提高,到增量为1时,其实多数情况下只需微调即可,不会涉及过多的数据移动。
初始增量为gap=length/2,常用的增量是以2为跨度的增量,所以每一次排序的时候那么增量都为上一次的一半,也就是希尔增量。
用Python实现的代码如下:
def shellSort(arr):
n = len(arr)
gap = int(n/2)
while gap > 0:
for i in range(gap,n):
temp = arr[i]
j = i
while j >= gap and arr[j-gap] >temp:
arr[j] = arr[j-gap]
j -= gap
arr[j] = temp
gap = int(gap/2)
参考资料:
1.希尔排序
2.图解排序算法(二)之希尔排序
3.Python希尔排序 菜鸟教程