对长度为n的未排序数组的t个最小整数进行排序

时间:2014-02-05 00:23:36

标签: arrays algorithm sorting

我试图找到一种最有效的方法来排序长度为n的未排序数组的t个最小整数。

我正在尝试运行O(n)但是一直卡住了。

我能想到的最好的方法就是整理整个阵列并取得第一个t。在所有其他情况下,我一直有机会留下最小的遗留物,如果我再检查它们,那么整个阵列的排序时间也相同。

有人能给我一些想法吗?

2 个答案:

答案 0 :(得分:3)

运行类似quickselect的内容以查找第t个元素,然后对数据进行分区以提取t个最小元素。这可以在O(n)时间内完成(平均情况)。

快速选择是:

  

类似于快速排序的算法,它重复选择“枢轴”并根据此枢轴对数据进行分区(将枢轴留在中间,左侧是较小的元素,右侧是较大的元素)。然后它递归到包含目标元素的一侧(通过计算任一侧的元素数量可以很容易地确定它。)

然后你仍然需要对t元素进行排序,这可以通过例如quicksort或mergesort来完成,给出O(t log t)的运行时间。

总的运行时间是O(n + t log t) - 你可能做得不够好。

答案 1 :(得分:0)

如果t远小于n,您可以在数组中的一个遍历中找到这些t元素,始终保存t个最小的项目并删除更大的项目整数 - 许多数据结构可用于此,例如BST。

然后运行时间为min(O(n), O(t log(t)))