例如:
首先根据个位数的数值,在走访数值时将它们分配至编号0到9的桶子中:
| 0 | 91 | 0 | 0 | 4 | 0 | 56 | 17 | 38 | 9 |
接下来将这些桶子中的数值重新串接起来,成为以下的数列:
[91,4,56,17,38,9]
接着再进行一次分配,这次是根据十位数来分配:
| 4,9 | 17 | 0 | 38 | 0 | 56 | 0 | 0 | 0 | 91 |
接下来将这些桶子中的数值重新串接起来,成为以下的数列:
[4,9,17,38,56,91]
待排序数组[17, 4, 56, 38, 9, 91]
第一步首先根据个位数的数值,在走访数值时将它们分配至编号0到9的桶子中:
| 0 | 91 | 0 | 0 | 4 | 0 | 56 | 17 | 38 | 9 |
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 桶编号
第二步接下来将这些桶子中的数值重新串接起来,成为以下的数列:
[91,4,56,17,38,9]
接着再进行一次分配,这次是根据十位数来分配:
| 4,9 | 17 | 0 | 38 | 0 | 56 | 0 | 0 | 0 | 91 |
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 桶编号
第三步接下来将这些桶子中的数值重新串接起来,成为以下的数列:
[4,9,17,38,56,91]
这时候整个数列已经排序完毕;如果排序的对象有三位数以上,则持续进行以上的动作直至最高位数为止。
#! /usr/bin/env python
# -*- coding: utf-8 -*-
def radix_sort(lst):
bucket = [[], [], [], [], [], [], [], [], [], []] #can not use [[]]*10
bucket1 = [[], [], [], [], [], [], [], [], [], []]
for i in lst:
bucket[i%10].append(i)
lst1 = []
for b in bucket:
lst1.extend(b)
for i in lst1:
bucket1[i/10%10].append(i)
lst2 = []
for b in bucket1:
lst2.extend(b)
return lst2
if __name__ == "__main__":
lst = [17, 4, 56, 38, 9, 91]
print radix_sort(lst)