package algorithm.sort;
public class Quick {
public static void sort(Comparable[] a){
int lo = 0;
int hi = a.length - 1;
sort(a,lo,hi);
}
private static void sort(Comparable[] a,int lo,int hi){
if (hi <= lo){
return;
}
int partition = partition(a,lo,hi);
sort(a,lo,partition-1);
sort(a,partition+1,hi);
}
public static int partition(Comparable[] a,int lo,int hi){
Comparable key = a[lo];
int left = lo;
int right = hi +1;
while (true){
while (less(key,a[--right])){
if (right == lo){
break;
}
}
while (less(a[++left],key)){
if (left == hi){
break;
}
}
if (left >= right){
break;
}else{
exchange(a,left,right);
}
}
exchange(a,lo,right);
return right;
}
private static boolean less(Comparable v,Comparable w){
return v.compareTo(w) < 0;
}
private static void exchange(Comparable[] a,int i,int j){
Comparable temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
package algorithm.test;
import algorithm.sort.Quick;
import java.util.Arrays;
public class QuickTest {
public static void main(String[] args) {
Integer[] array = {5,3,4,1,2};
Quick.sort(array);
System.out.println(Arrays.toString(array));
}
}
得到结果
[1, 2, 3, 4, 5]