【手寫排序算法及優化】快速排序

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



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章