Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 如何在不排序整个列表的情况下获取列表的前10个已排序项_Algorithm_Sorting - Fatal编程技术网

Algorithm 如何在不排序整个列表的情况下获取列表的前10个已排序项

Algorithm 如何在不排序整个列表的情况下获取列表的前10个已排序项,algorithm,sorting,Algorithm,Sorting,问题是我有一个100万个数字的列表,但我只想要排序列表的前10个,但我不想对整个列表排序?有可能吗?有。您只需浏览列表一次,然后存储最小的十个数字。算法将是O(n)(实际上是O(n*10)worstcase) 您需要的是优先级队列。将每个号码插入优先级队列。如果队列大小超过10,则删除最小(或最大)值。队列末尾保留的值是最大(或最小)的10个值 如果队列是使用堆实现的,那么这可能是一个非常有效的算法。您可以通过使用堆作为10的“列表”将10转换为基于lg的常量。:-)递归:当然,但这清楚地表明,

问题是我有一个100万个数字的列表,但我只想要排序列表的前10个,但我不想对整个列表排序?有可能吗?

有。您只需浏览列表一次,然后存储最小的十个数字。算法将是O(n)(实际上是O(n*10)worstcase)


您需要的是优先级队列。将每个号码插入优先级队列。如果队列大小超过10,则删除最小(或最大)值。队列末尾保留的值是最大(或最小)的10个值


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

您可以通过使用堆作为10的“列表”将10转换为基于lg的常量。:-)递归:当然,但这清楚地表明,当数字10变得更高时(例如,您希望对列表进行一半排序),O将改变,而简单的数组则不行。然后,您将需要一个更好的数据结构,如glowcoder所说。
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.