递归实现快速排序算法(Java)
快速排序的理念主要是使用分治
/**
* 快速排序算法
*
* @author pya
* @since 2021-10-31
*/
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;
}
// 对a数组中,从lo到hi的元素进行切分
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{
exch(a,left,right);
}
}
exch(a,lo,right);
return right;
}
private static void exch(Comparable[] a,int i,int j){
Comparable t = a[i];
a[i] = a[j];
a[j] = t;
}
private static boolean less(Comparable v,Comparable w){
return v.compareTo(w)<0;
}
}