快速排序基本思路:每一次排序定义一个基准,一次排序完成后,基准左边的比一定基准小,右边的一定比基准大;然后再运用递归依次排序直到退出递归;排序完成。
public class Quick {
public static void main(String[] args) {
int[] arr = {6, 1, 2, 7, 9, 3, 4, 5, 10, 8};
quickSort(arr, 0, arr.length - 1);
System.out.println(Arrays.toString(arr));
}
public static void quickSort(int[] arr, int left, int right){
if (left < right) {
//把数组分块
int pivot = partition(arr, left, right);
// System.out.println(Arrays.toString(arr));
//基准元素左边递归
quickSort(arr, left, pivot-1);
//基准元素右边递归
quickSort(arr, pivot+1, right);
}
}
public static int partition(int[] arr, int left, int right) {
int pivot = arr[left]; //将第一个数作为基准元素
while (left < right) {
//先将right右移,直到遇到比第一个小的
while (left < right && arr[right] >= pivot) {
right--;
}
arr[left] = arr[right];//将小于基准的值存到左边的数组中
//将left,下标左移,直到遇到比第一个大的
while (left < right && arr[left] <= pivot){
left++;
}
arr[right] = arr[left];//将大于基准的值存到右边的数组中
}
arr[left] = pivot; //记录基准元素到当前指针指向的区域
return left; //返回基准元素的索引
}
}