快速排序

    public static void quick(int[] data,int _left,int _right){

        //判断需要排序的如果是相同位置,或者不合理的左边大于右边的数据,直接跳过
        if (_left>=_right){
            return;
        }

        //左指针 最左边
        int leftPoint = _left;
        //右指针 最右边
        int rightPoint = _right;

        //辅助量
        int aux;
        //基准量 设置为最左边的值
        int baseValue = data[_left];

        //如果左指针移动到与右指针相等的时候,本轮结束
        while (leftPoint!=rightPoint){
            //向左移动,碰到第一个大于的基准量的值停下
            while (rightPoint>leftPoint&&data[rightPoint]>=baseValue){
                rightPoint--;
            }
            //向右移动,碰到第一个小于基准量
            while (rightPoint>leftPoint&&data[leftPoint]<=baseValue){
                leftPoint++;
            }
            //如果此时左指针小于右指针,则把两边值交换,
            //这样,结束之后,左指针左边都是比它小的,右指针右边都是比他大的
            if (rightPoint>leftPoint){
                aux = data[rightPoint];
                data[rightPoint] = data[leftPoint];
                data[leftPoint] = aux;
            }

            System.out.println(leftPoint+"    "+rightPoint);
            System.out.println(Arrays.toString(data));
        }

        //最后把基准值归位,也就是和 此时的右指针交换到中间位置
        aux = data[_left];
        data[_left] =  data[leftPoint];
        data[leftPoint] = aux;
        System.out.println(Arrays.toString(data));

        //再对左边序列 右边序列单独排序
        quick(data,_left,leftPoint-1);
        quick(data,leftPoint+1,_right);
    }

你可能感兴趣的:(快速排序)