关于快速排序

来源:3-5 三路快排partition思路的应用 Sort Color

cd123456

2020-06-17

波波老师,我想问下快排是无论怎么优化最坏情况都是O(nn)吗?采用三路快排+三值取中选取pivot是不是可以避免呢?三路快排可以避免数组元素全部相同的情况,三值取中对于完全排好序或近乎排好序的数组应该也不会退化到O(nn)了吧?
另外老师说java等很多语言是使用三路快排作为内置排序的算法,但我查了下好像现在java和python都是用timsort了

写回答

1回答

liuyubobobo

2020-06-17

是的,三路快排无论怎么优化,最坏时间复杂度都是 O(nlogn) 的


在所有元素都一样的情况下,三路快排是 O(n) 的。但是,我们不是以某一种特殊情况来看某个算法的时间复杂度的,而是最坏情况,所以三路快排依然是 O(nlogn) 的算法。这就像插入排序在全部数据有序的情况下是 O(n) 的,但是插入排序算法还是一个 O(n^2) 的算法。


Java 中的 Arrays.sort 默认是三路快排(但和课程中介绍的三路快排还有一定区别。)可以参考这里:http://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/be44bff34df4/src/share/classes/java/util/Arrays.java 143 行。


继续加油!:)

0
5
liuyubobobo
回复
cd123456
恰好在电脑前而已。继续加油!:)
2020-06-17
共5条回复

玩转算法面试-- Leetcode真题分门别类讲解

课程配套大量BAT面试真题,高频算法题解析,强化训练

7410 学习 · 1150 问题

查看课程