有一个数组A[1, ..., n]
,并且知道每1 <= l <= n
然后A[l] in {1,2,...,n^5}
。
我怎样才能找到一个在O(n)中对此进行排序的algroithm?
答案 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