public class Quick {
public static void sort(Comparable[] a){
int lo = 0;
int hi = a.length-1;
sort(a,lo,hi);
}
public static void sort(Comparable[] a,int lo,int hi){
if (lo>=hi){
return;
}
int index = partition(a ,lo,hi);
sort(a,lo,index-1);
sort(a,index+1,hi);
}
public static int partition(Comparable[] a,int lo,int hi){
int p_right = hi+1;
int p_left = lo;
while (true){
//找出左边比第一个元素小的元素
while (less(a,++p_left,lo)){
if (p_left==hi){
break;
}
}
//找出右边比第一个元素小的元素
while (less(a,lo,--p_right)){
if (lo==p_right){
break;
}
}
if (p_right<=p_left){
break;
}else {
exchange(a,p_left,p_right);
}
}
exchange(a,lo,p_right);
return p_right;
}
public static boolean less(Comparable[] a,int i,int j){
return a[i].compareTo(a[j])<0;
}
public static void exchange(Comparable[] a,int x,int y){
Comparable temp;
temp = a[x];
a[x] = a[y];
a[y] = temp;
}
}
import java.util.Arrays;
public class QuickTest {
public static void main(String[] args) {
Integer[] a = {12,4,6,5,1,3,2,9,8,4,1};
Quick.sort(a);
System.out.println(Arrays.toString(a));
}
}