基数排序python
基数排序(Radix Sort),列表最大值有几位数,就按几次进行分桶装桶,通过不停的分桶和装桶来实现排序,桶里面不需要排序,因为桶已经是有序的了。
第一次按照个位数进行分桶,分桶完毕桶里面的数按个位数是排好序的,然后进行第二轮按百位数进行分桶,这时列表已经是按个位数排好序的,然后依次分到按百位数排序的桶里面,这时桶里面按百位数也是排好序的,依次类推排序完毕。
def radix_sort(li): max_num = max(li) # 最大值 it = 0 # 个位、十位、百位、千位等依次分桶 while 10 ** it <= max_num: # it 为装几次桶,it 从0开始计数,即从个位开始排序 buckets = [[] for _ in range(10)] # 分十个桶 for val in li: digit = (val // 10 ** it) % 10 # 每一轮分到第几个桶里面 buckets[digit].append(val) # 分桶完成 li.clear() for buc in buckets: # 把数重新写回li li.extend(buc) it += 1

浙公网安备 33010602011771号