【发布时间】:2026-01-10 02:05:01
【问题描述】:
我想对条目列表进行排序,然后选择该排序列表的子集(页面)。例如;我有 10.000 件物品,想要从 101 件到 200 件。 一种天真的方法是首先对所有 10.000 个项目进行排序,然后选择页面;这意味着项目 1 - 100 和 201 - 10.000 都不必要地完全排序。 是否存在一种现有算法,它只会对页面中的项目进行完全排序,一旦明确条目不在页面中,就会停止进一步排序? C中的源代码会很棒,但描述也可以
【问题讨论】:
-
说没有必要的排序是没有意义的,因为在所有项目都按排序顺序之前,您无法知道某个项目是否会出现在页面上。
-
第 9999 和 9998 项交换没有关系,只要它们在第 200 项之后即可
-
你将如何确定前 200 个条目?
-
我可以想象类似快速排序的方法将是一种选择。如果在第一次迭代之后,列表被分成 2 个未排序的列表,比如 4000 个较低的项目和 6000 个较高的项目,那么 6000 个较高的项目不必进一步排序。
-
@coen:这完全正确,如果你这样做,你最终会得到一个非常好的 O(n) 快速选择算法。如果您不希望大多数页面被请求,这很酷,但是如果请求很多页面,它就会崩溃,因为总成本变得比缓存的初始排序要大得多。
标签: c algorithm sorting pagination