桶排序
每个桶存放一定范围的数,再对桶内的数进行排序。
def but_sort(li, n=100, max_num=10000): """ :param li: 待排序的序列 :param n: 桶的个数 :param max_num: 最大值 :return: 排序后的序列 """ # 1. 创建桶 buckets = [[] for _ in range(n)] # 2.将序列的中的数放到对应的桶里 for value in li: # max_num//n代表一个桶内放几个数 i_b = min((value // (max_num//n)), n-1) buckets[i_b].append(value) # 保持桶内顺序 for j in range(len(buckets[i_b])-1, 0, -1): if buckets[i_b][j] < buckets[i_b][j-1]: buckets[i_b][j], buckets[i_b][j-1] = buckets[i_b][j-1], buckets[i_b][j] else: break sorted_li = [] for b in buckets: for i in b: sorted_li.append(i) return sorted_li
li = [random.randint(0,10000) for i in range(100000)]
# print(li)
li = but_sort(li)
print(li)
print(len(li))