2010-06-28 51 views

回答

6

是的。您只需运行一次该列表,并存储十个最小的数字。该算法将是O(n)(实际上,O(n * 10)最差情况)

Foreach (list) 
- Check if current item is smaller than the biggest item in the sorted Array[10] 
- If so, put the current item at the right spot (sorted) in the array (insertionsort), bumping away the biggest item. 
+1

您可以通过使用堆为您的“列表”10来将该10变成基于lg的常量。:-) – corsiKa 2010-06-28 19:46:09

+0

O(n * 10)= O(n)。 – recursive 2010-06-28 20:11:42

+0

递归:offcourse,但是这表明,当数字10变得更高(比如说,你希望列表的一半排序)时,O会改变,而一个简单的数组将不会。然后你需要一个更好的数据结构,比如glowcoder说。 – Konerak 2010-06-28 20:17:31

6

你想要的是优先级队列。将每个号码插入优先队列。如果队列大小超过10,则删除最小(或最大)值。最后队列中剩余的值是10个最大(或最小)。

如果使用Heap实现队列,那么这可能是一个非常有效的算法。

相关问题