这是我参与11月更文挑战的第22天,活动详情查看:2021最后一次更文挑战
前言:
在前面系列更文中, 我们对 JavaScript 实现经典算法作了具体学习, 小总结更多阅读-list & 经典排序算法-list
那么接下来就对其他的一些算法技巧继续学习记录: 比如单/双/三路快排, 对撞指针, 等等
数组排序--三路快排
思路:
三路快排 通过两个指针对撞 将整个数组分成三个部分, 就是通过双指针,同时排序小于选定值, 等于选定值和大于选定值三种情况.
随机选取一个值v作为分界点, 分别排序小于v, 等于v和大于v的 只遍历一次, 一个指针用来搬运1, 一个指针用来搬运2
解决的问题
三路快排也是用来解决序列中存在大量重复元素的问题, 比双路快排更高效
将数组分为三个部分, 小于pivot、等于pivot、大于pivot
等于pivot的部分不递归, 在对于存在大量重复元素的数组排序时, 将大大缩小递归的数据规模
更多阅读:
- 【Array.prototype.map() 】、
- 【JS-特殊符号-位运算符】、
- 【ES6 - for/of】、
- 【JS-逻辑运算符-短路了?】、
- 【JS-箭头函数】、
- 【JavaScript-forEach()】、