【发布时间】:2020-12-26 16:44:16
【问题描述】:
给定一个大小为 N 的数组(数组包含整数),我希望对数组进行排序,但只对数组中 log(n) 的长度进行排序,所以到最后数组将有 n/logn 个序列(每个序列的 logn 大小)已排序。
我的想法是使用 MergeSort 算法,在最坏的时间复杂度情况下运行 O(nlogn)。 但是由于我只是对数组中 logn 的长度进行排序,所以时间复杂度应该是 O(log(n)*log(log(n))) 因为我实际上并没有遍历 N 的整个长度。
所以 MergeSort 将在这种情况下执行 n/logn 次。 是否可以安全地假设此操作的整体时间复杂度为 (n/logn)*O(log(n)log(log(n))) => O(nlog(log (n)))?
【问题讨论】:
-
如果您的数据不是很大,那么快速排序是比合并排序更好的选择。快速排序最坏的情况是 N 平方,但在最坏的情况下甚至不可能下降,但其他事情(例如相同的数组和引用位置)使其比合并排序更强大和更快。但归并排序适用于大量数据,因为它还为您提供了虚拟内存使用。
-
是的,O(n log log n) 是正确的。
标签: arrays sorting time-complexity