c – 为第一个元素排序数组的算法,然后是前2个元素,然后是前3个元素,依此类推

我有一个未排序的数字列表,我想要一个算法,这样我就可以获得前R个元素的排序列表,但由于这个R对于不同的测试用例可能不同,我不想每次为前R个元素排序数组.有没有办法让我完成这件事.一种可能的方法是保持向量数组,使得我有前1个数字排序,然后前2个数字排序,然后前3个数字排序等等,但它将需要1log1 2log2 3log3 …. nlogn时间,这是N ^ 2logN复杂性.更快的方法可能吗?
最佳答案
在这种情况下,好的旧插入排序似乎比O(N ^ 2 lg N)更好,因为您不需要为每个R从头开始排序元素.
想象一下,你有一个排序的前n个元素的副本,其中n为1..R-1.
只需将R-th元素插入到R-1第一个元素(即O(R))的排序数组的副本中,就可以得到R个第一个元素的排序数组.

如果你想在1..N中为每个R得到结果,那就是O(N ^ 2),但实际上这将小于O(N ^ 2),因为你可以按需生成排序数组,从最后排序开始元素少于R的元素

转载注明原文:c – 为第一个元素排序数组的算法,然后是前2个元素,然后是前3个元素,依此类推 - 代码日志