双轴快排
双轴快排
public class DQuickSort {
public static void main(String[] args) {
int a[]={1,2,56,45,23,23,23,234,234,2345,65,12,45,234,123};
dualPivotQuickSort(a,0,a.length-1);
System.out.println(Arrays.toString(a));
}
public static void dualPivotQuickSort(int[] arr,int start,int end){
//参数不对直接返回
if(start>end){
return;
}
//参数不对先进行交换
if(arr[start]>arr[end]){
swap(arr,start,end);
}
int left=start;
int right=end;
int pivot1=arr[start],pivot2=arr[end];
int k=start+1;
while (k<right){
if(arr[k]<pivot1){ //比左端基点小,放在左边
swap(arr,k,++left);
k++;
}
else if(arr[k]>pivot2){ //比右端基点大,放在右边
swap(arr,k,--right);
}
else{ //放在中间
k++;
}
}
swap(arr,start,left);
swap(arr,end,right);
dualPivotQuickSort(arr,start,left-1);
dualPivotQuickSort(arr,left+1,right-1);
dualPivotQuickSort(arr,right+1,end);
}
//
private static void swap(int[] arr, int start, int end) {
int temp=arr[start];
arr[start]=arr[end];
arr[end]=temp;
}
}

浙公网安备 33010602011771号