limit N,100
SQL语句就是这种情况。
当我只想获取N~N+100
个最大元素时,对整个数组进行排序是一种浪费。
这种情况的最佳算法是什么?
答案 0 :(得分:2)
std::partial_sort
(C ++)的STL实现
答案 1 :(得分:2)
在未排序的数组中你最好的希望是O(n),因为必须检查所有元素。在遍历您时,只需将当前前100个元素保留在内存中,如果遇到的元素大于当前100中的最低元素,则只需将其删除并添加新元素即可。您可以将内存中的前100个元素保留为已排序的队列。
答案 2 :(得分:1)
我想这取决于数组的大小。
对于一个足够小的数组,如在选择排序中,只需在数组中迭代100次,选择最大元素并将其删除。
如果数组较大,您可以调整快速排序算法,以便在每个步骤中对要比枢轴小的或的元素进行排序,具体取决于是否有足够大的元素支点。
一旦存储桶变得足够小,快速排序算法就可以切换到选择排序算法。