快速排序
思想
基于分治算法,首先选出一个中间点,把所有比中间点小的数放在数组左边,比中间点大的数放在右边。然后对数组左边和右边分别再进行快速排序。
步骤
- 确定分界点,左边第一个,或者右边第一个,或者中间点
- 划分区间,使得左边的数字都小于等于分界点,右边的数字都大于等于分界点
- 分别处理左右两个区间
模板
此处只有一个我背的滚瓜烂熟的模板
public void quickSort(int[] arr, int left, int right){
if(left >= right) return;
int i = left - 1;
int j = right + 1;
int x = arr[left];
while(i < j){
while(arr[++i] < x);
while(arr[--j] > x);
if(i < j){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = arr[i];
}
}
quickSort(arr, left, j);
quickSort(arr, j+1, right);
}