做力扣的一道题目:
169 多数元素
的时候,用到了快速排序,所以复习了一下快排。
一、快排
快排思想就是:
- 选定一个哨兵元素pivot;
- 把小于pivot的元素放在pivot左边,大于pivot的放在右边,这样,划分完后pivot就在自己最终应该在的位置了;
- 对于pivot位置的左边和右边,递归进行 1、2 的过程。
其中,quickSort就是主方法,是分支递归的过程,2的步骤就是核心的partition方法,他进行划分,使得每一轮用 O(n) 的时间确定了一个元素的位置。
因此快速排序的渐近时间复杂度是 O(nlogn)。
快排代码:
public void quickSort(int[] nums){
sort(nums, 0, nums.length-1);
}
//递归
public void sort(int[] nums, int i, int j){
if( i >= j )return;//递归结束条件
int p = partition(nums, i, j);
sort(nums, i, p-1);
sort(nums, p+1, j);
}
//划分
public int partition(int[] nums, int i, int j){
//选最左边为哨兵