给定一个长度为N的数组。它可以包含范围从1到N ^ 2(N平方)的值,包括值,值是整数。是否可以在O(N)时间内对此数组进行排序?如果可能的话怎么办?
编辑:这不是作业。
答案 0 :(得分:9)
将每个整数写入基数N,即每个x可以表示为(x1,x2),x = 1 + x1 + x2 * N.现在,您可以使用计数排序对其进行两次排序,一次在x1上,一次在x2上,从而生成排序数组。
答案 1 :(得分:8)
是的,您可以使用radix sort使用 N 存储桶和两次传递。基本上,您将数字视为基数 N 中的2位数。
答案 2 :(得分:0)
可以使用radix sort在O(n)
时间内对任何具有明确定义的最大值的整数数组进行排序。您遇到的任何整数列表都可能出现这种情况。例如,如果您正在排序任意精度整数的列表,那就不是真的。但是所有C积分类型都有明确定义的固定范围。