一.思想
希爾排序是一種分組插入排序算法。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