數組的快速排序

快速排序開發的時候使用的比較頻繁,平常一般使用jdk的Arrays.sort(int[] array),但jdk的代碼很多,現在自己也寫一個來試試。

這裏要使用遞歸的方式,先將第一個值取出作爲參考,後面每個數都和它進行比較,先從右到左,如果有值比參考值小,就將該數取出,記錄下該數位置,把該數放入到第一個位置,然後在從左到右,如果有值比參考數大,將這個值放入到剛剛記錄的位置。

public void quickSort(int[] array, int begin, int end) {
        if (begin >= end) return;
        int low = begin;//低位指針
        int high = end;//高位指針
        int x = array[low];//取出第一個值,作爲比較參考值
        boolean direction = true;//true爲從右到左

        Flag: //標記

        while (low < high) {
            if (direction) {
                //從右到左
                for (int i = high; i > low; i--) {
                    //1、如果高位的值比參考值小,則將高位的值取出,放入到參考值所在的位置,方向改爲從左到右
                    if (array[i] <= x) {
                        array[low] = array[i];
                        low++;//低位往右移動一位
                        high = i;//高位指向i
                        direction = !direction;//方向相反
                        continue Flag;
                    }
                }
                high = low;//如果都沒有的情況下,高位就移動到最低位,
            } else {
                for (int i = low; i < high; i++) {
                    //1、如果低位的值比參考值大,則將低位的值取出,放入到參考值所在的位置,方向        改爲從左到右
                    if (array[i] >= x) {
                        array[high] = array[i];
                        high--;//高位往右移動一位
                        low = i;//低位指向i
                        direction = !direction;//方向相反
                        continue Flag;
                    }
                }
                low = high;//如果都沒有的情況下,低位就移動到高位,
            }
        }
        array[low]=x;//最後將參考值放入到自己的位置中
        quickSort(array, begin, low-1);
        quickSort(array, low+1, end);


    }

就這一段。測試一下


        int[] array = {5,2,1,4,6,8,3,9,7};
        quickSort(array, 0, array.length-1);
        for (int i : array) {
            System.out.print(i+"  ");
        }

得到結果,1  2  3  4  5  6  7  8  9  

大功告成。

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