问题描述
假设我们将Quicksort修改为具有三个分区,而不是两个。左分区的值枢轴。然后,我们在左右分区上递归。这种三向分区需要多少时间?
我在一个面试问题中看到了这一点,答案为O(n)。但是对于普通的1个分区快速排序,它是O(nlogn)。
请帮助我理解为什么O(n)吗?
解决方法
当所有值都相同时,只有O(n)。分区的第一个实例将找到所有==枢轴的值(无论为枢轴选择哪个值),并且由于没有值枢轴,因此不会发生递归。
对于普通数据,时间复杂度保持为平均情况O(n log(n))或最差情况O(n ^ 2)。