我有一组N个相同的数字。我正在应用快速排序。在这种情况下,排序的时间复杂度应该是多少。
我对这个问题感到很惊讶,但没有得到确切的解释。
答案 0 :(得分:0)
它将始终执行相同的比较计数(如果您使用纯快速排序),因为它必须检查所有数字(除非您添加一些特殊功能,这将检查像这样的特殊情况)。但它不需要切换任何数字,所以这是最好的情况,因此它的复杂性应该是(n log n)。
答案 1 :(得分:0)
天真的快速排序算法将是O(n^2)
。即使它具有更智能的枢轴选择算法,也是如此。为了避免O(n^2)
,快速排序算法需要将数字划分为每个数据集的3个集合(小于,等于,大于)。
更智能的枢轴选择算法是:
O(n log n)
保证的一个 - 这里不会涉及到这个,但是这样的算法可以保证枢轴来自例如排序数组的25-75%之间。但是,大多数普通的快速排序算法会将数字划分为小于或大于数据透视表的数字。与枢轴相等的那些任意地与那些大于或小于枢轴的那些捆绑在一起。
在所有数字相等的情况下,每个分区只会产生一个分区 - 因此每次只减少剩余分区的大小。
为了避免这种情况,快速排序算法需要将数字划分为3组 - 小于,大于和等于数据集。