当整数从[1,100]范围内时,对100万个整数进行排序的最快方法是什么?

时间:2010-07-22 16:24:56

标签: algorithm sorting

注意:我已经考虑过基数排序,桶排序,计数排序。

无论如何都要实现大O(n)?

8 个答案:

答案 0 :(得分:66)

您可以使用counting sort

  

计数排序(有时称为超排序或数学排序)是一种排序算法(如桶排序)利用了解要排序的数组中的数字范围(数组A)。

     

计数排序是一种稳定的排序,其运行时间为Θ(n + k),其中n和k分别是数组A(输入数组)和C(计数数组)的长度。为了使该算法有效,k必须不比n大得多。

在这种情况下,k为100,n为1000000。

答案 1 :(得分:8)

在这种情况下,计算排序是明显的选择。是的,正确实施它应该具有线性复杂性。

答案 2 :(得分:6)

如何计算每个整数的出现次数,然后将它们全部打印出来。听起来像O(n)

答案 3 :(得分:3)

我认为,你的意思是你想要达到一个小的O(n);铲斗排序最快。事实上,既然你知道整数的范围,那么使用桶排序只会成为计算数字出现的问题,这可以在O(n)中完成,即线性时间。

所谓的计数排序只是桶排序的特例。

答案 4 :(得分:2)

如果范围是固定的并且很小(例如1..100:),则计数排序得到O(N)

答案 5 :(得分:0)

答案 6 :(得分:0)

以下是scala中的计数排序:

val res = Array.fill (100)(0)
val r = util.Random 
// generate data to sort
val nums = for (i <- 1 to 1000*1000) yield r.nextInt (100)
for (i <- nums) res(i) += 1
println (res.mkString (" ")) 

答案 7 :(得分:0)

使用Radix Sort(在Ruby中):

def sort(array)
sorted_array = Array.new(100,[])
array.each do |t|
sorted_array[t-1] = sorted_array[t-1] + [t]
end
sorted_array.flatten!
end