public class QuickSort {
public static void quickSort(Comparable[] comparables){
qs(comparables,0,comparables.length-1);
}
//快排
private static void qs(Comparable[] comparables,int left,int right){
if(left>=right) return;
swap(comparables,left,(new Random().nextInt(right-left+1)+left));
int point=left;
for(int i=left+1;i<=right;i++)
if(comparables[i].compareTo(comparables[left])<0)
swap(comparables,i,++point);
swap(comparables,left,point);
qs(comparables,left,point-1);
qs(comparables,point+1,right);
}
//交换数组中的两个值
private static void swap(Comparable[] comparables,int a,int b){
Comparable temp=comparables[a];
comparables[a]=comparables[b];
comparables[b]=temp;
}
//使用
public static void main(String[] args){
Integer[] a =new Integer[]{2354,99,-8,-2345,Integer.MAX_VALUE,Integer.MIN_VALUE};
quickSort(a);
for(int t:a){
System.out.println(t);
}
String[] ab=new String[]{"ABDF","acd","ACDF","BBBB"};
quickSort(ab);
for(String t:ab)
System.out.println(t);
/*输出
-2147483648
-2345
-8
99
2354
2147483647
ABDF
ACDF
BBBB
acd
*/
}
}
以下是《Programming Pearls, Second Edition》的C语言实现
void quicksort(int l, int u)
{ int i, m;
if (l >= u) return;
10
swap(l, randint(l, u));
m = l;
for (i = l+1; i <= u; i++)
if (x[i] < x[l])
swap(++m, i);
swap(l, m);
quicksort(l, m-1);
quicksort(m+1, u);
}