快速排序可以总结成3步:
1、确定分界点
2、调整区间,根据分界点把区间一分为二,左边区间的值都是小于等于分界点的值,右边区间的值都是大于等于分界点的值。
3、递归处理左右边界
代码样例如下:
import java.util.*;
public class QuickSort {
public int[] sortArray(int[] nums) {
quickSort(nums, 0, nums.length - 1);
return nums;
}
public void quickSort(int[] nums, int left, int right) {
//如果区间为空或者只有一个数
if (left >= right) {
return;
}
int i = left - 1, j = right + 1;
int pivot = nums[left];
while (i < j) {
//调整区间
while (nums[++i] < pivot) ;
while (nums[--j] > pivot) ;
if (i < j) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
}
//递归处理左右边界
quickSort(nums, left, j);
quickSort(nums, j + 1, right);
}
}
需要注意的是取边界的值和递归处理区间数据时的边界问题,否则容易造成死循环
1、如果递归的区间是[left,j]和[j+1,right],边界值就要是nums[left]或者nums[(left + right) /2]
2、如果递归的区间是[left,i-1]和[i,right],边界值就要是nums[right]或者nums[(left + right +1)/2]