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);
}
}
}