public class QuickSort { public static void main(String[] args) { int[] arr = {10, -5, 45, 0, -7, 700, 1}; quickSort(arr, 0, arr.length - 1); System.out.println(Arrays.toString(arr));// int []arr = new int[80000000];// for (int i = 0; i < 80000000; i++) {// arr[i] = (int) (Math.random() * 8000000);// }// long start= System.currentTimeMillis();// quickSort(arr,0,arr.length-1);// long end= System.currentTimeMillis();// System.out.println("time="+(end-start)); } public static void quickSort(int[] arr, int left, int right) { int l = left; int r = right; int pivot = arr[(left + right) / 2]; int temp = 0; while (l < r) { //在左边找,找到大于等于pivot的值 while (arr[l] < pivot) { l += 1; } //在左边找,找到小于等于pivot的值 while (arr[r] > pivot) { r -= 1; } //如果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 , if (l == r) { l += 1; r -= 1; } //向左递归 if (left < r) { quickSort(arr, left, r); } //向右递归 if (right > l) { quickSort(arr, l, right); } }}