希尔排序
动画很神奇
def insert_sort_gap(li,gap): ## 可以把之前的插入排序认为默认gap是1
for i in range(gap,len(li)):
j = i -gap ## 有序区,从0开始
tmp = li[i]
while j >=0 and li[j] >tmp:
li[j+gap] = li[j]
j -=gap
li[j+gap]=tmp
def shell_sort(li):
d = len(li)//2
while d >=1:
insert_sort_gap(li,d)
d = d//2
li = list(range(1000))
import random
random.shuffle(li)
shell_sort(li)
print(li)
之前写过插入排序的话,写起来耶很容易,把之前的插入排序认为默认gap是1的话,理解起来,也很容易 通过不断局部有序,然后扩大局部,让整体有序
取gap的方法有很多,很有趣,可以google
计数排序
def count_sort(li,max_count=100):
count = [0 for _ in range(max_count+1)]
for val in li:
count[val] +=1 ## pretty cleaver
li.clear()
for ind,val in enumerate(count):
for i in range(val):
li.append(ind)
import random
li = [random.randint(0,100) for _ in range(1000)]
print(li)
count_sort(li)
print(li)
有很多限制,比如,不知道最大值,或者值跨度特别大(废空间)
桶排序