快速排序
速记快速排序
快速排序
优雅的快速排序
更新后的快排,发现之前的快排存在点问题,而且不利于记忆(常见的算法应该很快就能写出来)
1 | public int[] sortArray(int[] nums) { |
快排code:
1 | public void sort(int[] nums, int i, int j) { |
我们知道,快排的pivot选择,一般有三种选法,第一个数字、最后一个数字、中间任意一个数字
上面的代码就选择了中间任意一个数字,如果要选择第一个数字或是最后一个数字,那么他们有如下对应规则:
注意边界问题:pivot
选择要注意,其实选择left
和right
都可以,但是要和初始值对应
- pivot选择
nums[j]
:可以选(i, left-1) (left , j)
区间 - pivot选择
nums[i]
:可以选(i, right), (right + 1, j)
区间