快速排序

    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);
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 16宿命:用概率思维提高你的胜算 以前的我是风险厌恶者,不喜欢去冒险,但是人生放弃了冒险,也就放弃了无数的可能。 ...
    yichen大刀阅读 6,109评论 0 4
  • 公元:2019年11月28日19时42分农历:二零一九年 十一月 初三日 戌时干支:己亥乙亥己巳甲戌当月节气:立冬...
    石放阅读 6,917评论 0 2
  • 今天上午陪老妈看病,下午健身房跑步,晚上想想今天还没有断舍离,马上做,衣架和旁边的的布衣架,一看乱乱,又想想自己是...
    影子3623253阅读 2,934评论 3 8