运行 归并排序时间,所有元素都相同

Running time of merge sort, all elements are identical

给定 n 个都相同的数,那么归并排序的 运行 时间是多少?

它会在线性时间内 O(n) 或者, 最好的情况 O(nlogn)

您需要重新检查合并排序的递归公式:

T(n) = 2T(n/2) + \Theta(n)

现在,当所有值都相同时,让我们看看公式中会发生什么变化。 \Theta(n) 用于合并两个子数组。由于两个具有相同成员的子数组的合并会清除这些数组,独立于相同的成员,因此在您的情况下是相同的。

因此,对于指定的情况,递推公式将保持不变;因此时间复杂度将是Theta(n log n)。这也算是mergesort的缺点之一吧。

对于纯合并排序,移动次数总是相同的 O(n log(n))。如果所有元素相同或顺序或倒序,则比较次数约为最坏情况下比较次数的一半。

基于现有数据排序创建运行的自然合并排序对于所有相同值或按顺序或相反顺序需要 O(n) 时间。它的一个变体是混合插入排序 + 合并排序,称为 Timsort。

https://en.wikipedia.org/wiki/Timsort