使用O(n)中的值范围对数组进行排序

时间:2017-05-22 18:40:30

标签: algorithm

有一个数组A[1, ..., n],并且知道每1 <= l <= n然后A[l] in {1,2,...,n^5}

我怎样才能找到一个在O(n)中对此进行排序的algroithm?

2 个答案:

答案 0 :(得分:3)

想象一下,在Base-n系统中表示A[i]中的值。然后每个数字变成一个五位数的n-ary数字,这意味着你可以用五个Radix Sort的应用程序对整个数组进行排序,其中“radix”为n。

计算数字k中每个“数字”x的值,如下所示:

d x =(k /(n x ))%n

其中/表示整数除法。

答案 1 :(得分:1)

使用base-N基数排序的整数列表a, 这也适用于一个简单的清单

def rsort(a,N):

if a:
    bins = [ [],[],[],[],[] ]

    m = max(a)
    r = 1

    while m > r:
        for e in a:
            bins[(e/r)%N].append(e)

        r = r * N
        a = []
        for i in range(N):
            a.extend(bins[i])
            bins[i] = []

return a