查找数组中N~N + 100个最大元素的算法?

时间:2011-10-30 12:34:41

标签: algorithm sorting

limit N,100 SQL语句就是这种情况。

当我只想获取N~N+100个最大元素时,对整个数组进行排序是一种浪费。

这种情况的最佳算法是什么?

3 个答案:

答案 0 :(得分:2)

查找std::partial_sort(C ++)

的STL实现

答案 1 :(得分:2)

在未排序的数组中你最好的希望是O(n),因为必须检查所有元素。在遍历您时,只需将当前前100个元素保留在内存中,如果遇到的元素大于当前100中的最低元素,则只需将其删除并添加新元素即可。您可以将内存中的前100个元素保留为已排序的队列。

答案 2 :(得分:1)

我想这取决于数组的大小。

对于一个足够小的数组,如在选择排序中,只需在数组中迭代100次,选择最大元素并将其删除。

如果数组较大,您可以调整快速排序算法,以便在每个步骤中对要比枢轴小的的元素进行排序,具体取决于是否有足够大的元素支点。

一旦存储桶变得足够小,快速排序算法就可以切换到选择排序算法。