快排+java实现

import java.util.Arrays;

public class QuickSort {
    //三数取中法。取出不大不小的那个位置
    public static int getPivotPos(int[] a,int low,int high) {
        int mid=(low+high)/2;
        int pos=low;
        int minpos=low;
        int maxpos=low;
        if(a[mid]<a[minpos]) minpos=mid;
        if(a[high]<a[minpos]) minpos=high;
        if(a[mid]>a[maxpos]) maxpos=mid;
        if(a[high]>a[maxpos]) maxpos=high;
        if(low!=minpos&&low!=maxpos) pos=low;
        if(mid!=minpos&&mid!=maxpos) pos=mid;
        if(high!=minpos&&high!=maxpos) pos=high;
        return pos;
    }
    //划分,取出枢纽位置
    public static int partition(int[] a,int low,int high) {
        int pivotpos=getPivotPos(a,low,high);
        int pivot=a[pivotpos];
        int temp=pivot;
        a[pivotpos]=a[low];
        a[low]=temp;
        while(low<high) {
            while(low<high&&a[high]>=pivot) high--;
                a[low]=a[high];
            while(low<high&&a[low]<=pivot)  low++;
                a[high]=a[low];
        }
        a[low]=pivot;
        return low;
    }
    //快排
    public static void quickSort(int[] a,int low,int high) { 
        if(low<high) {
            int pivotpos=partition(a,low,high);
            quickSort(a,low,pivotpos-1);
            quickSort(a,pivotpos+1,high);
        }
    }
    //重载快排
    public static void quickSort(int[] a) {
        if(a.length==0)
            return;
        int low=0;
        int high=a.length-1;
        quickSort(a,low,high);
    }
    
    public static void main(String[] args) {
        int[] a= {12,32,24,99,54,76,48};
        quickSort(a);
        System.out.println(Arrays.toString(a));
    }
}

猜你喜欢

转载自www.cnblogs.com/heyboom/p/8989841.html