2.1 选择基准元素
const pivot = arr[Math.floor(arr.length / 2)];
这就像园丁从花园中间随机选择一株花作为参考,这株花将成为我们划分其他花的标准。
2.2 划分数组
const left = arr.filter(x => x < pivot);
const middle = arr.filter(x => x === pivot);
const right = arr.filter(x => x > pivot);
这个步骤就像园丁将其他花分成三组:比参考花"矮"的、与参考花一样高的、比参考花"高"的。在实际的快速排序实现中,我们通常会使用双指针法在原地完成这个过程,就像园丁在花园里来回走动,将花朵移到合适的位置。
2.3 递归排序
return [...quickSort(left), ...middle, ...quickSort(right)];
这个步骤就像园丁对"矮"组和"高"组的花朵重复之前的过程,直到所有的花都被正确地排列在花园里。