希尔排序(python实现)
历史
希尔排序是1959年,Shell发明的,这是第一个突破O(n2)的排序算法,他与直接插入排序不同的是,他会优先比较距离较近的元素。因此,希尔排序又叫做缩小增量排序。
原理
其工作原理是定义一个间隔序列来表示排序过程中进行比较的元素之间有多远的间隔,每次将具有相同间隔的数分为一组,进行插入排序,大部分场景中,间隔是可以提前定义好的,也可以动态生成。
希尔排序的实质就是分组的插入排序
代码示例
# shell sort
def shell_sort(arr):
# todo 定义间隔
gap = len(arr) // 2
while gap:
# todo 需要两层循环,这个是外层选项
for j in range(gap, len(arr)):
i = j
while j:
# 对比基准元素和 下标加tap元素,如果后面小,则交换,对比结束,gap 缩小重新赋值
if arr[i] < arr[i - gap]:
arr[i], arr[i - gap] = arr[i - gap], arr[i]
else:
break
# todo 最容易漏掉的一步,是的让此次外循环执行i次(组)的关键之处
i -= 1
gap = gap // 2
return arr
结果验证
res = shell_sort([1, 22, 3, 6, 9, 8, 4, 5, 22, 6, 17])
[1, 3, 4, 5, 6, 6, 8, 9, 17, 22, 22]
优缺点
空间复杂度O(1), 平均时间复杂度O(nlogn) (优点)
不稳定排序
LESS IS MORE !