python实现基数排序

来源:互联网 发布:网赌用什么软件 编辑:程序博客网 时间:2024/05/06 12:41
例如:

待排序数组[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 lst2if __name__ == "__main__":    lst = [17, 4, 56, 38, 9, 91]    print radix_sort(lst)

0 0
原创粉丝点击