1、算法步骤
a. 初始化i为0,表示个位排序;n为1,表示最小的位数置1;max_num为待排序数组中的最大值。
b. 计算最大值的位数n。
c. 在每一位上,构建一个桶的字典,每个桶用于存放对应位数的数字。
d. 对待排序数组中的每个元素,根据其在当前位的数字,将其加入到相应位数的桶中。
e. 将桶中的元素依次取出,放回到原数组中,完成对当前位的排序。
f. 重复以上步骤,直到所有位数都进行过排序。
2、动图演示
3、代码
def RadixSort(lst): # 初始为个位排序 i = 0 # 最小的位数置1(包含0) n = 1 # 得到带排序数据中最大数 max_num = max(lst) # 得到最大数是几位数 while max_num > 10**n: n += 1 while i < n: # 用字典构建桶 bucket = {} for x in range(10): # 将每个桶置空 bucket.setdefault(x, []) # 对每一位进行排序 for x in lst: # 得到每位的基数 radix = int((x / (10**i)) % 10) # 将对应的数组元素加入到相应位基数的桶中 bucket[radix].append(x) j = 0 for k in range(10): # 若桶不为空 if len(bucket[k]) != 0: # 将该桶中每个元素 for y in bucket[k]: # 放回到数据中 lst[j] = y j += 1 i += 1 return lst