import java.util.Random;
public class QuickSort {
public static int partition (int a[],int left,int right){
int flag=a[left];//以最左边即a[left]为标记数,这个可以随便选取
while(left<right){
while(left<right&&a[right]>=flag)
right--;//右边比flag元素大的元素不动,把比flag小的元素移动到左边
a[left]=a[right];//这里说明 右边的元素比flag小,所以把这个元素移动到左边,此时右边的right这个位置空出
while(left<right&&a[left]<flag)
left++;
a[right]=a[left];//此时刚好把上面空出的right位置填补
}
a[left]=flag;//到最后还空出一个left位置,这里刚好用flag填补。
return left;
}
public static void quickSort(int a [],int left,int right){
int flag=0;
if(left<right){
flag=partition(a, left, right);
quickSort(a, left, flag-1);
quickSort(a, flag+1, right);
}
}
public static void main(String args[]){
long startTime=System.currentTimeMillis();
int a[]=new int[2000];
Random random=new Random();
for(int i=0;i<a.length;i++){
a[i]=random.nextInt(2000);
}
quickSort(a,0,a.length-1);
for(int i=0 ;i<a.length;i++){
System.out.print(a[i]+"\t");
}
long endTime=System.currentTimeMillis();
System.out.println();
System.out.println("total time: " + (endTime-startTime)+ " ms");
}
}