可能重复:
How to find the kth largest element in an unsorted array of length n in O(n)?
如何编写一个算法来输出 n (在Java中)的未排序数组中的第10高数字?
答案 0 :(得分:2)
您正在寻找selection algorithm,它可以在O(n)
也可以使用部分排序或使用固定大小k
的最小堆来完成,每次最小数量包含k
个数字,并在此时迭代数组保持这个堆。
请注意,对于任意k
的一般问题,最后一个解决方案[min-heap]的效率低于选择算法的大O表示法。
答案 1 :(得分:2)
创建一个包含10个元素的数组。保持数组元素的排序。
通过原始数组一次,将元素与数组中最小的元素进行比较。如果它更大,请将其放入。否则继续。
答案 2 :(得分:0)
如果数组不包含离散元素(包含例如双精度数),最好的方法是使用Prune and Search算法。如果包含离散元素(整数) - 使用Counting sort并选择第10个元素)