如何在不使用辅助阵列的情况下优化快速排序

时间:2017-02-26 20:24:08

标签: java sorting

这是一个快速排序,如你所知,我想在它自己的arrayList中优化它,并且不想使用另一个数组或使用linkedList。假设数组的半数按升序排序,其他数据则在其中。我的意思是优化是代码中的交换较少,这取决于选择数据的位置或更改分区函数。如果你知道我应该如何优化它如果我把它写成true,请帮助me.total of count变量是一个swap。谢谢!

public class Quick {  
    public static void main(String[] args) {  
        int[] a = {4,6,0,7,1,12,2,18,4,9,4,13,5,6};  
        sort(a,0,a.length - 1);

        for (int i = 0; i < a.length; i++) {
            System.out.print(a[i] + " ");
        }
    }

    static void sort(int[] a, int lo, int hi){
        if(lo < hi){
            int j = partiton(a ,lo ,hi);
            sort(a, lo ,j - 1);
            sort(a, j + 1, hi);
        }
    }

    static int partiton(int[] a, int lo, int hi){
        int i = lo; int j = hi + 1;
        int v = a[lo];
        int count = 0;

        while(true){
            while(a[++i] <  v){
                if (i == hi)
                    break;
            }

            while(v < a[--j]){
                if (j == lo)
                    break;
            }

            if (i >= j){
                break;
            }
            swap(a, i, j);
            count = count + 1;
        }
        swap(a, lo, j);
        count = count + 1;
        System.out.println("swap : " + count);

        return j;


    }

    static void swap(int[] a, int i, int j){
        int temp = 0;
        temp = a[j];
        a[j] = a[i];
        a[i] = temp;
    }

}

0 个答案:

没有答案