
为什么最坏情况下快速排序的时间复杂度是 O(n2) 呢?我们前面讲过,如果数据原来就是有序的或者接近有序的,每次分区点都选择最后一个数据,那快速排序算法就会变得非常糟糕,时间复杂度就会退化为 O(n2)。实际上,这种 O(n2) 时间复杂度出现的主要原因还是因为我们分区点选得不够合理。
那什么样的分区点是好的分区点呢?或者说如何来选择分区点呢?
最理想的分区点是:被分区点分开的两个分区中,数据的数量差不多。如果很粗暴地直接选择第一个或者最后一个数据作为分区点,不考虑数据的特点,肯定会出现之前讲的那样,在某些情况下,排序的最坏情况时间复杂度是 O(n2)。为了提高排序算法的性能,我们也要尽可能地让每次分区都比较平均。
比如:
- 三数取中法
- 随机法
网友评论