主要的排序方法在先前的篇目里面已经介绍了,也应该够用了,今天记作番外篇,介绍额外的几种排序方法
希尔排序:
希尔排序是插入排序的一种改进,还记得插入排序吗?
插入排序:设前j个数是有序的,j+1位数与第j位数作比,如果小于第j位,则向前滑动,直到找到应有的位置
希尔排序将j+1中的1改为了gap,以组为单位,先逐步降低逆序数,最后一遍当gap = 1,将剩余的逆序数调整好,这样子处理,速度比插入排序快。
def insert_sort_gap(gap, li) :
for i in range(gap, len(li)): # li[i]是新来的数,li[j]是有序的部分,有序部分从后往前看
j = i - gap
empty = li[i]
while j >= 0 and empty < li[j] :
li[j + gap] = li[j]
j -= gap
li[j + gap] = empty
return li
def shell_sort(li) :
d = len(li) // 2
while d >= 1 :
insert_sort_gap(d, li)
d = d // 2
return li
s = list(range(33))
import random
random.shuffle(s)
print(s)
print(shell_sort(s))
[9, 2, 3, 24, 28, 8, 7, 23, 30, 6, 21, 19, 31, 29, 14, 1, 32, 18, 4, 11, 20, 13, 12, 25, 26, 5, 15, 10, 17, 22, 0, 16, 27]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32]