public class QuickSort { public static void main(String[] args) { //int[] arr={-9,78,0,23,-567,70,70,900,4561}; int[] arr={2,10,8,22,34,5,12,28,21,11}; quickSort(arr,0,arr.length-1); System.out.println(Arrays.toString(arr)); } public static void quickSort(int[] arr, int left, int right) { //左下标 int l = left; //右下标 int r = right; // pivot中轴值 int pivot = arr[(left + right) / 2]; int tem = 0; // while循环的目的是让比中轴值小的放到左边,大的放大右边 while (l < r) { // 在pivot的左边一直找到,找到大于等于pivot值,才退出 while ((arr[l] < pivot)) { l++; } //在pivot的右边一直找,找到小于等于pivot值,才退出 while (arr[r] > pivot) { r--; } //排序完成 if(l>=r){ break; } tem = arr[l]; arr[l] = arr[r]; arr[r] = tem; // 如果交换完成后,发现arr[l]==pivot值 r前移 if(arr[l]==pivot){ r--; } // 如果交换完成后,发现arr[r]==pivot值,l后移 if(arr[r]==pivot){ l++; } } //如果l==r,l++,r--,否则栈溢出 if(l==r){ l++; r--; } // 向左递归 if(left<r){ quickSort(arr,left,r); } // 向右递归 if(right>l){ quickSort(arr,l,right); } } }