学习排序算法技巧-三路快排

240 阅读2分钟

这是我参与11月更文挑战的第22天,活动详情查看:2021最后一次更文挑战

前言:

在前面系列更文中, 我们对 JavaScript 实现经典算法作了具体学习, 小总结更多阅读-list & 经典排序算法-list

那么接下来就对其他的一些算法技巧继续学习记录: 比如单/双/三路快排, 对撞指针, 等等

数组排序--三路快排

思路:

三路快排 通过两个指针对撞 将整个数组分成三个部分, 就是通过双指针,同时排序小于选定值, 等于选定值和大于选定值三种情况.

随机选取一个值v作为分界点, 分别排序小于v, 等于v和大于v的 只遍历一次, 一个指针用来搬运1, 一个指针用来搬运2

解决的问题

三路快排也是用来解决序列中存在大量重复元素的问题, 比双路快排更高效

将数组分为三个部分, 小于pivot、等于pivot、大于pivot

等于pivot的部分不递归, 在对于存在大量重复元素的数组排序时, 将大大缩小递归的数据规模

更多阅读:

经典排序算法: