快速排序算法的思路与实现(js 语言)
D&C(divide and conquer) 分而治之
d&c 是一种递归式解决问题的方法(思路),使用 d&c 解决问题分为两个步骤:1. 找出基线条件(不再递归的条件),这种条件应该尽可能的简单。 2. 不断将问题分解(或者说缩小规模),直到符合基线条件
逻辑
如果一个数组是已经排好序的数组,那个在这个数组中任选一个元素,元素左边的元素将会小于等于该元素,元素所有右边的元素将会大于等于该元素。
我们依据该元素,可以对一个无序数组做如下操作。任选一个元素,循环该无需数组,声明两个数组变量,一个是 less,一个是 greater,我们把小于该元素的数放入 less 数组中,把大于该元素放入 greater 中,那个便满足了以上的逻辑。接下来,我们再从 less 数组中选取一个元素,执行如上操作,使得 less 数组又分为两组,一组比选中元素小,一组比选中元素大。对 greater 数组也同样操作。这样下来,最后我们得到的就是一个有序的数组。
步骤
- 找基准值(pivot)
- 分区(partitioning):找出比基准值以及比基准值大的元素 => 数组划分为:一个小于基准值的子数组,基准值,一个大于基准值的子数组
- 递归
代码实现
1 | function quickSort(arr) { |