算法思想
在待排序的数组中选取一个作为基准元素,基准元素任意取,这里选择数组中间的元素作为基准,遍历数组中的其他元素,把小于基准元素的放在基准元素左边,大于基准元素的放在基准元素的右边,然后对基准元素两边的序列分别执行上面的操作,可以考虑使用递归,就这样一直划分下去,直到划分后的序列左右两边都只有一个元素,此时就得到了排序后的序列。
代码实现
function quick(a) {
if(a.length<=1){
return a;
}
//找到数组中间位置的元素,记为基准元素
let middleIndex=Math.floor(a.length/2);
let middleValue=a.splice(middleIndex,1)[0];
//用两个数组保存划分后的左右序列
let left=[];
let right=[];
//遍历数组其他元素,将小于基准元素的放在left[],大于的放在right[]
for(let i=0;i<a.length;i++){
a[i]<middleValue?left.push(a[i]):right.push(a[i]);
}
//递归执行,对左右序列再次划分
//最后将得到的所有数组和middleValue连接起来,形成排序后的数组
return quick(left).concat(middleValue,quick(right));
}
let arr=[5,3,21,5,3,6,74,3,1];
console.log(quick(arr));