输出未排序数组中的第10个最高数字

时间:2012-03-31 18:58:32

标签: algorithm

  

可能重复:
  How to find the kth largest element in an unsorted array of length n in O(n)?

如何编写一个算法来输出 n (在Java中)的未排序数组中的第10高数字?

3 个答案:

答案 0 :(得分:2)

您正在寻找selection algorithm,它可以在O(n)

中的数组中找到第k个最大/最小数字

也可以使用部分排序或使用固定大小k的最小堆来完成,每次最小数量包含k个数字,并在此时迭代数组保持这个堆。

请注意,对于任意k的一般问题,最后一个解决方案[min-heap]的效率低于选择算法的大O表示法。

答案 1 :(得分:2)

创建一个包含10个元素的数组。保持数组元素的排序。

通过原始数组一次,将元素与数组中最小的元素进行比较。如果它更大,请将其放入。否则继续。

答案 2 :(得分:0)

如果数组不包含离散元素(包含例如双精度数),最好的方法是使用Prune and Search算法。如果包含离散元素(整数) - 使用Counting sort并选择第10个元素)