public static void quickSort(int[] arr,int left,int right) {int l = left;//左下标int r = right;//右下标//pivot 中轴值int pivot = arr[(left + right) / 2];int temp;//临时变量,交换时使用//while循环的目的是让比pivot值小的方到左边//比pivot值大的方到右边while (l < r) {//在pivot的左边一直找,找到大于等于pivot值,才退出while (arr[l] < pivot) {l += 1;//1-2}//在pivot的右边一直找,找到小于等于pivot值,才退出while (arr[r] > pivot) {r -= 1;//4-2}//如果l >= r说明pivot的左右两边的值已经按照左边都是小于等于pivot值,//右边都是大于等于pivot的值if (l >= r) {break;}//交换temp = arr[l];arr[l] = arr[r];arr[r] = temp;//如果交换完后,发现这个arr[l] == pivot值, r--,前移if (arr[l] == pivot){r -= 1;}//如果交换完后,发现这个arr[r] == pivot值, l++,前移if (arr[r] == pivot){l += 1;}}//如果 l == r,必须l++,r--,否则会出现栈溢出if (l == r) {l++;r--;}//向左递归if (left < r){quickSort(arr,left,r);}//向右递归if (right > l){quickSort(arr,l,right);}}
