工作原理
使用分治法来把一个序列分为两个子序列,然后递归地排序这两个子序列。
快速排序步骤为:
挑选基准值:从数列中挑出一个元素,称为“基准”。
分割:重新排序数列,所有比基准值小的元素放在基准前面,所有比基准值大的元素放在基准后面。在这个分割结束之后,对基准值的排序就已经完成。
递归排序子序列:分别递归地将小于和大于基准值元素的子序列排序。
js代码实现 + 效率测试
运算10次,平均耗时19.58 ms
// 创建 20000 个随机数,数值范围:1 - 100000let 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( '快速排序' );
