注意:我已经考虑过基数排序,桶排序,计数排序。
无论如何都要实现大O(n)?
答案 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