package com.dai.sort; import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Date; public class QuickSort { public static void main(String[] args) { /*int[] arr = {-9, 78, 0, 23, -567, 70}; quickSort(arr, 0, arr.length-1); System.out.println(Arrays.toString(arr)); */ int[] arr = new int[800000]; for(int i=0; i<800000; i++) { arr[i] = (int)(Math.random()*8000000); } Date date1 = new Date(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String date1String = simpleDateFormat.format(date1); System.out.println("排序前的时间为:" + date1String); quickSort(arr,0,arr.length-1); Date date2 = new Date(); String date2String = simpleDateFormat.format(date2); System.out.println("排序后的时间为:" + date2String); } public static void quickSort(int[] arr, int left, int right) { int l = left; //左索引 int r = right;//右索引 //pivot 中轴 int pivot = arr[(left+right)/2]; //比pivot小的放左边,大的放右边 int temp = 0; while(l<r) { while(arr[l] < pivot) { l +=1; } 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,前移 if(arr[l] == pivot) { r -= 1; } //如果交换完后,arr[r]=pivot,则后移 if(arr[r] == pivot) { l += 1; } } //如果l==r,必须l++ r--, 否则出现栈溢出 if(l == r) { l += 1; r -= 1; } //向左递归 if(left<r) { quickSort(arr, left, r); } //向右递归 if(right>l){ quickSort(arr, l, right); } } }