package V_Recursion;public class C_QuickSort {public static void main(String[] args) {int[] arr = {6, 1, 2, 7, 9, 3, 4, 5, 10, 8};quicSort(arr, 0, arr.length - 1);for (int i = 0; i < arr.length; i++) {System.out.print(arr[i] + " , ");}}public static void quicSort(int[] arr, int i, int j) {//定义两个变量,记录要查找的范围int start = i;int end = j;//递归的出口if (start>end){return;}//记录基准数int baseNumber = arr[i];//利用循环找到要交换的数字while (start != end) {//利用end,从后往前找,找比基准数小的数字while (true) {//当end和star的指针指向重叠时,或者后指针找到了比基准数小的数时breakif (end <= start || arr[end] < baseNumber) {break;}end--;}//利用start,从前往后找,比基准数大的数字while (true) {//当end和star的指针指向重叠时,或者前指针找到了比基准数大的数时break if (end <= start || arr[start] > baseNumber) {break;}start++;}//把end和start指向的元素交换int temp = arr[start];arr[start] = arr[end];arr[end] = temp;}//当start和end指向同一个元素,那么上面的循环就会结束//表示找到了基准数在数组中因该存在的位置//基准数归位//就是拿着这个范围中的第一个数字跟start交换位置int temp = arr[start];arr[start] = arr[i];arr[i] = temp;//确定6左边的范围重复刚刚所做的事情quicSort(arr,i,start-1);//确定6右边的范围重复刚刚的事情quicSort(arr,start+1,j);} }