一.思想
希尔排序是一种分组插入排序算法。python
- 首先取一个整数d1=n/2,将元素分为d1个为一组,每组相邻量元素之间距离为d1,两组数据一一进行对比按大小,重新分配两组
如[1,3,0,2]
第一次排序后变成[0,2,1,3]
算法
- 取第二个整数d2=d1/2,重复上述分组排序过程,直到di=1,即全部元素在同一组内进行直接插入排序。
按上面那个简单例子走第二次排序为shell
[0,2,1,3]
按间隔1进行对比第一次而后依次变成markdown
0与2比,0比2小顺序不变ide
[0,2,1,3]
post
2与1比,1比2小1去前面code
[0,1,2,3]
blog
依次类推...所有走完就是排好了排序
[0,1,2,3]
it
二.代码
这是网上找的精简后的代码,我本身撸的和屎同样很乱
def shell_sort(li): gap = len(li)//2 while gap>0: for i in range(gap,len(li)): tmp =li[i] j = i - gap while j >=0 and tmp <li[j]: li[j+gap]=li[j] j -=gap li[j+gap]=tmp gap /= 2