快速排序是面试环节中最常考的经典排序算法之一。面试官常要求面试者能够手写快速排序的代码。
算法思路
- 在数组中选择一个数字,即“基准”,把数组分为两部分,所有比基准小的放在基准前面,比基准大的放在基准后面,递归的对基准前后的子数列排序。
关于基准的选取?可以固定位置选取,如arr[0]、随机选取、也可以三分取中。
步骤
- 选基准pivot;
- 划分为三部分,保证 left < pivot , pivot < right;
- 递归左,递归右;
- 合并三部分。
时间复杂度
- 分区的时间复杂度 O(n)
- 递归的时间复杂度 O(logN)
- 所以时间复杂度为 O(n*logN)
Coding
Array.prototype.quickSort = function(){
const rec = (arr) => {
if(arr.length === 1) return arr;
const left = [];
const right = [