算法可视化网站:https://visualgo.net/zh
1、快速排序的思路
分区:从数组中任意选择一个“基准”,所有比基准小的元素放在基准前面,比基准大的元素放在基准后。
递归:递归地对基准前后的子数组进行分区。
2、快速排序的代码实现
Array.prototype.quickSort = function() {
const rec = (arr) => {
if(arr.length === 1) { return arr;}
const left = [];
const right = [];
const mid = arr[0];//基准
for(let i = 1; i < arr.length; i+=1) {
if(arr[i] < mid) {
left.push(arr[i]);
}else {
right.push(arr[i]);
}
}
return [...rec(left), mid, ...rec(right)];
};
const res = rec(this);
res.forEach((n, i) => {
this[i] = n;
});
};
const arr = [2,4,5,3,1];
arr.quickSort()
console.log(arr)
![3bb3f6db3fabfaa1ec489fcb26cb196f.png](https://i-blog.csdnimg.cn/blog_migrate/3d6e7d17e78438962ec8a5740c263f46.jpeg)
3、快速排序的时间复杂度
- 递归的时间复杂度是O(logN)
- 分区操作的时间复杂度是O(n)
- 总的时间复杂度:O(n*logN)