package com.wmq.demo01.sort;
import java.util.Arrays;
/**
* 快速排序练习
*/
public class QuickSort {
public static void main(String[] args) {
//int arr[] = {9,-7,0,23,-9,25};
int arr[] = new int[80000];
for (int i = 0; i < 80000; i++) {
arr[i] = (int)(Math.random()*800000);
}
long start = System.currentTimeMillis();
sort(arr,0,arr.length-1);
long end = System.currentTimeMillis();
System.out.println("一共消耗了"+(end-start)+"毫秒");
}
public static void sort(int[] arr,int left,int right){
int l = left;
int r = right;
int pivot = arr[(left+right)/2];
int temp = 0;
while (l<r){
while(arr[l]<pivot){ //找一个比中轴值大的数
l += 1;
}
while (arr[r]>pivot){ //找一个比中轴值小的数
r -= 1;
}
if (l>=r){ //如果左边找完了,结束
break;
}
temp = arr[r]; //左边找到了,右边找到了,交换
arr[r] = arr[l];
arr[l] = temp;
if (arr[l] == pivot){ //交换完后发现左边的值和中轴值相等了,让右边的向左边移动。
r -= 1;
}
if (arr[r] == pivot){
l += 1;
}
}
if (l == r){ //防止栈溢出
l +=1;
r -=1;
}
if (left < r){ //左递归
sort(arr,left,r);
}
if (right > l){
sort(arr,l,right); //右递归
}
}
}