玄弋 In solitude, where we are least alone

双轴快排

双轴快排

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;
    }


}

posted @ 2021-05-14 09:38  玄弋  阅读(101)  评论(2)    收藏  举报