python实现基数排序

例如:

待排序数组[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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值