希尔排序
动画很神奇
def insert_sort_gap(li,gap): ## 可以把之前的插入排序认为默认gap是1for 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 -=gapli[j+gap]=tmpdef shell_sort(li):d = len(li)//2while d >=1:insert_sort_gap(li,d)d = d//2li = list(range(1000))import randomrandom.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 cleaverli.clear()for ind,val in enumerate(count):for i in range(val):li.append(ind)import randomli = [random.randint(0,100) for _ in range(1000)]print(li)count_sort(li)print(li)
有很多限制,比如,不知道最大值,或者值跨度特别大(废空间)
桶排序
