工作原理
使用分治法来把一个序列分为两个子序列,然后递归地排序这两个子序列。
快速排序步骤为:
挑选基准值:从数列中挑出一个元素,称为“基准”。
分割:重新排序数列,所有比基准值小的元素放在基准前面,所有比基准值大的元素放在基准后面。在这个分割结束之后,对基准值的排序就已经完成。
递归排序子序列:分别递归地将小于和大于基准值元素的子序列排序。
js代码实现 + 效率测试
运算10次,平均耗时19.58 ms
// 创建 20000 个随机数,数值范围:1 - 100000
let ary = [];
for (let i = 0; i < 20000; i++) {
ary.push( Math.floor( Math.random()*99999 + 1 ) );
}
// 快速排序 基准默认总是取当前区间的最后一个元素
function quickSort(ary, start, end) {
let _quickSort = function(ary, start, end) {
if (end <= start) {
return ;
}
let pivot = ary[end],
left = start,
right = end - 1;
while (left < right) {
while (ary[left] < pivot && left < right) left++;
while (ary[right] >= pivot && left < right) right--;
[ary[left], ary[right]] = [ary[right], ary[left]];
}
if (ary[left] >= pivot) {
[ary[left], ary[end]] = [ary[end], ary[left]];
}
else {
left++;
}
_quickSort(ary, start, left - 1);
_quickSort(ary, left + 1, end);
}
_quickSort(ary, start, end);
}
console.time( '快速排序' );
quickSort(ary, 0, ary.length - 1);
console.timeEnd( '快速排序' );