数组的快速排序

快速排序开发的时候使用的比较频繁,平常一般使用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  

大功告成。

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