1 快排 递归 不稳定发生在基准元素与v[L]交换 需要partition三步走,一找二划三递归
快排的步骤:
- 选一个元素做基准
- 进行partition,就是把比基准小的放在基准的左边,把比基准数大的放到右边,划分结束后基准元素位于中间(如何划分看代码,从后往前找和从前往后找)
- 对每个分区递归操作上述划分函数,直至每个分序列大小为0或1(递归结束的条件)
- 最差的情况O(n2)每次选的基准元素都是最大或者最小的,这样每次只划分一个分区
- 最好的情况nlgn每次选的都是中位数,每次平均划分两个分区
面试中常问的:
- 快排为什么快?
快排之所以快就是因为用到了分治法
解释下冒泡跟快排的区别
还有快排不需要额外的辅助空间
- 快排的核心在哪里?
基准元素的选择以及元素的移动,对于无序数列,通常我们选取第一个或者最后一个作为基准元素,对于有序的数列,那就成为最差的情况,所以应该随机选取元素作为基准元素(或者选择三数取中值,随机选取三个数,选择中间值作为基准,比如选开头、结尾、中间三个数)
关于元素的移动有多种,代码中讲到的是一种
3. 快速排序的优化主要从以下几个方面考虑:
优化基准选择