美文网首页
快速排序

快速排序

作者: 河神 | 来源:发表于2021-11-11 10:14 被阅读0次
        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);
        }
    

    相关文章

      网友评论

          本文标题:快速排序

          本文链接:https://www.haomeiwen.com/subject/kbvwzltx.html