希尔排序,它是简单插入排序经过改进后的一个更高效的版本。
希尔排序属于插入排序。
希尔排序也称为缩小增量排序。
思想:
希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。
图示:
按4进行逻辑上的 分组
增量为4
每组进行排序:
这就是第一次按照4排序完得到的结果
12345786
<mark>然后再上个增量上缩小一半变成2</mark>
上图是第二次增量为2的逻辑分组
接下来进行第二次的希尔排序
第二次希尔排序的结果为:
12435687
继续
第三次再次缩小一半增量为1
逻辑分组:
进行每一组(第一组)的排序后:
ok
用python实现希尔排序
def shell_sort(arr):
n = len(arr)
gap = n//2
while gap > 0:
for i in range(gap, n):
while i >= gap and arr[i] < alist[i - gap]:
arr[i], arr[i - gap] = arr[i - gap], arr[i]
i -= gap
#print(arr)
gap //= 2
return arr