快速排序这段代码怎么理解

快速排序怎么理解

//如果l==r,必须l++,r--,否则出现栈溢出
        if(l==r){
            l+=1;
            r-=1;
        }
        //向左递归
        if(left{
            quickSort(arr,left,r);
        }
        //向右递归
        if(right > l){
            quickSort(arr,l,right);
        }

这段有点理解不了


package com.atguigu.sort;

import java.util.Arrays;

public class QuickSort {
    public static void main(String[] args) {
        int[] arr = {-9,78,0,23,-567,70};
        quickSort(arr,0,arr.length-1);
        System.out.println("arr="+ Arrays.toString(arr));
    }

    //
    public static void quickSort(int[] arr,int left,int right)
    {
        int l = left;//左下标
        int r = right;//右下标
        int pivot = arr[(left + right) / 2];
        int temp = 0;//临时变量,作为交换时使用
        while (l//while循环的目的是让比pivot小的值放到左边,比pivot大的放到右边
            //在pivot的左边一直找,找到大于等于pivot的值,才退出
            while (arr[l]1;
            }
            //在pivot的右边找小于等于pivot的值,才退出
            while (arr[r]>pivot){
                r-=1;
            }
            //l>=r说明pivot左右两边的值已经按照左边全部是小于pivot的值,右边全部>=pivot的值
            if(l>=r){
                break;
            }//交换
            temp = arr[l];
            arr[l] = arr[r];
            arr[r] = temp;
            //如果交换完后,发这个arr[l]==pivot的值相等,r--,前移
            if(arr[l]==pivot){
                r-=1;
            }
            //如果交换完后,发这个arr[r]==pivot的值相等,l++,后移
            if(arr[r]==pivot){
                l+=1;
            }
        }
        //如果l==r,必须l++,r--,否则出现栈溢出
        if(l==r){
            l+=1;
            r-=1;
        }
        //向左递归
        if(left//向右递归
        if(right > l){
            quickSort(arr,l,right);
        }

    }

}

这是快速排序的递归代码。其中,l 和 r 都是left和right的别名,表示数组的最小和最大下标。如果 l==r ,意味着左右两个指针重合,必须将其中一个指针向前移动,然后进行递归;如果 left < r,表示左边还有元素未处理,则进行递归处理;如果 right > l,表示右边还有元素未处理,则进行递归处理。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

这篇博客里的漫画图解,可能会对你有帮助,http://t.csdn.cn/SpvpZ