1.数组中随便找一个数用于比较(一般确定为第一个数)
const r = [10,3,9,2,8,1,5,4,6,7]; let baseData = data.splice(0,1)[0];
2.定义两个数组分别存放每次排序后参照数左边和右边的数。左边存放比参照数小的数,右边存放比参照数大的数。
let left = [],
right = [];3.开始执行一次排序,由于我们选择参照数的时候会把这个数从数组中删掉因此,我们循环的次数比data.length少一个。将比较的结果存入左或右的数组。
for (let i = 0; i< data.length; i++){
if(data[i] > baseData){
right.push(data[i]);
}else{
left.push(data[i]);
}
}4.因为并不是一次排序就可以将数组由大到小或由小到大排列,所以我们需要递归。对左边的数组和右边的数组继续排序。最后再把结果组合。
left = quickSort(left); right = quickSort(right); return [...left,baseData,...right];
完整代码
const r = [10,3,9,2,8,1,5,4,6,7];
function quickSort(data){
if(data.length <=1){
return data;
}
let baseData = data.splice(0,1)[0];
let left = [],
right = [];
for (const item of data){
if(item > baseData){
right.push(item );
}else{
left.push(item );
}
}
left = quickSort(left);
right = quickSort(right);
return [...left,baseData,...right];
}
console.log(quickSort(r));`



京公网安备 11010502036488号