java代码
public class QuickSort {
public static void sort(int[] array) {
if(array==null || array.length==1)
return;
sort(array,0,array.length-1);
}
private static void sort(int[] array,int lo, int hi) {
if (lo>=hi)
return;
int index = partition(array, lo, hi);
sort(array,lo,index-1);
sort(array,index+1,hi);
}
private static int partition(int[] array, int lo,int hi) {
int i=lo,j=hi+1;
int val = array[lo];
while(true)
{
while(array[++i]<val)
if(i==hi) break;
while(array[--j]>val)
if(j==lo) break;
if (i>=j) break;
swap(array,i,j);
}
swap(array, lo, j);
return j;
}
private static void swap(int[] array, int i, int j) {
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
public static void main(String args[]) {
int[] a = new int[]{2,5,1,8,4,5,6};
int[] b = new int[]{2,5,55,5,8,4,5,6};
sort(a);
sort(b);
System.out.println(a);//通过debug模式可以看到排序结果
System.out.println(b);
}
}
针对有许多重复值的数组,优化后的三向切分快速排序
public class QuickSort3Way {
public static void sort(int[] array) {
if(array==null || array.length==1)
return;
sort(array,0,array.length-1);
}
private static void sort(int[] array,int lo, int hi) {
if (lo>=hi)
return;
int lt = lo, i=lo+1,gt = hi;
int val = array[lo];
while (i<=gt) {
int cmp = array[i]-val;
if (cmp<0) swap(array,lt++,i++);
else if(cmp>0) swap(array,i,gt--);
else i++;
}
sort(array,lo,lt-1);
sort(array, gt + 1, hi);
}
private static void swap(int[] array, int i, int j) {
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
public static void main(String args[]) {
int[] a = new int[]{2,5,1,8,4,5,6};
int[] b = new int[]{2,5,55,5,8,4,5,6};
sort(a);
sort(b);
System.out.println(a);
System.out.println(b);
}
}