外观
注:图片来源于文章(https://segmentfault.com/a/1190000015316531) 快速排序采用了一种分治的思想,由于排序效率在同为O(N\*logN)的几种排序方法中效率较高,因此经常被采用。快速排序是一种不稳定的排序方法。该方法的基本思想是:
上面三步中,第一步定基准的方式比较多样化,网上大体有三种方式(具体用哪一种个人觉得没啥差别):
递归实现:
function quickSort(arr) {
// 数组长度小于2就直接返回,不需要再处理了,这个就是快排的终止条件
if (arr.length <= 1) {
return arr;
}
// pivot意思是:枢纽、中心点
var pivotIndex = Math.floor(arr.length / 2);
// 找基准,并把基准从原数组中删除
var pivot = arr.splice(pivotIndex, 1)[0];
// 定义左右数组
var left = [];
var right = [];
// 比基准小的放在left,比基准打的放在right
arr.forEach(function (val) {
if (val <= pivot) {
left.push(val);
} else {
right.push(val);
}
});
// 递归
return quickSort(left).concat([pivot], quickSort(right));
}