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));
`