计算机小混子 2023-01-26 20:39 采纳率: 100%
浏览 29
已结题

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

快速排序怎么理解

//如果l==r,必须l++,r--,否则出现栈溢出
        if(l==r){
            l+=1;
            r-=1;
        }
        //向左递归
        if(left<r){
            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<r){//while循环的目的是让比pivot小的值放到左边,比pivot大的放到右边
            //在pivot的左边一直找,找到大于等于pivot的值,才退出
            while (arr[l]<pivot){
                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<r){
            quickSort(arr,left,r);
        }
        //向右递归
        if(right > l){
            quickSort(arr,l,right);
        }

    }

}

  • 写回答

3条回答 默认 最新

  • lidiyscrp 2023-01-26 20:48
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 2月4日
  • 已采纳回答 1月27日
  • 创建了问题 1月26日

悬赏问题

  • ¥15 求指导ADS低噪放设计
  • ¥15 CARSIM前车变道设置
  • ¥50 三种调度算法报错 有实例
  • ¥15 关于#python#的问题,请各位专家解答!
  • ¥200 询问:python实现大地主题正反算的程序设计,有偿
  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存