利用基数排序对负数和正数进行排序

时间:2016-02-14 18:29:21

标签: python algorithm sorting negative-number radix-sort

我试图利用基数排序来排序无序整数列表,包括正数和负数。我有能力对正数列表进行排序,但我对如何使用带负数的基数排序感到困惑。我想知道是否有人可以帮助我编写代码并解释有关基数排序如何与负数一起工作的部分。经过一些谷歌搜索我明白你必须把负号视为一个特殊的角色,但我仍然在困惑的火车上。下面你可以看到我从https://gist.github.com/rizkyabdilah/1740053获取的基数排序的实现。

def radix_sort(random_list):
len_random_list = len(random_list)
modulus = 10
div = 1
while True:
    # empty array, [[] for i in range(10)]
    new_list = [[], [], [], [], [], [], [], [], [], []]
    for value in random_list:
        least_digit = value % modulus
        least_digit /= div
        new_list[least_digit].append(value)
    modulus = modulus * 10
    div = div * 10

    if len(new_list[0]) == len_random_list:
        return new_list[0]

    random_list = []
    rd_list_append = random_list.append
    for x in new_list:
        for y in x:
            rd_list_append(y)

random_data = [13, 8, 1992, 31, 3, 1993, 1, 0, -1]
print radix_sort(random_data)

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

最简单的方法是补充最重要字段的符号位,用于计数(直方图)生成和基数排序期间的索引。假设接近随机数据,由于随机写入,该过程受内存带宽限制,因此补充符号位的开销不会对整体性能产生太大影响。

假设一个或两个补码整数。

如果我没记错的话,签名+幅度,这是IEEE浮点值有效实现的方式(如果基数将它们排序为整数),需要补充正数的符号位,并取消整数的整数。负数。