基排序的概念就不做解释了,要说的一点是基排序中的这个基是可以任意选择的,只不过网上的大部分radix sort代码都是将10作为了基,我的这个代码是可以任意指定基的,代码如下:
import random
def numerical_radix_sort(num_list, b):
maxmium = num_list[0]
for i in num_list:
if maxmium < i:
maxmium = i
print(maxmium)
exp_base = 1
while maxmium > b ** exp_base:
exp_base = exp_base + 1
i = 0
while i < exp_base:
bucket = {}
for x in range(b):
bucket[x] = []
for x in num_list:
radix = int( (x/b**i) ) % b
bucket[radix].append(x)
j = 0
for k in range(b):
if(len(bucket[k])) != 0:
for y in bucket[k]:
num_list[j] = y
j = j + 1
i = i + 1
return num_list
###下面的代码是测试代码
num_list = [random.randint(0,100) for _ in range(20)]
base = 16
print(num_list)
num_list = numerical_radix_sort(num_list,base)
print(num_list)
运行结果为:
[9, 19, 86, 11, 1, 47, 17, 13, 70, 51, 82, 18, 39, 39, 43, 75, 72, 26, 29, 100]
100
[1, 9, 11, 13, 17, 18, 19, 26, 29, 39, 39, 43, 47, 51, 70, 72, 75, 82, 86, 100]