YYDSyyx123 2022-09-04 13:17 采纳率: 100%
浏览 7
已结题

java快速排序如何去理解

问题遇到的现象和发生背景

快速排序这几行代码都是啥意思?课堂上ppt写的,让我们理解,麻烦解答一下

问题相关代码,请勿粘贴截图
private static void quickSort(Integer[] arr, int low,int high){
        if(low > high){
            return;
        }
        int i = low;
        int j = high;
        int temp = arr[low];
        while (i < j){
            while (i < j && arr[j] >= temp){
                j --;
            }
            while (i < j && arr[i] <= temp){
                i ++;
            }
            if(i < j){
                int t = arr[i];
                arr[i] = arr[j];
                arr[j] = t;
            }
        }
        arr[low] = arr[i];
        arr[i] = temp;
        quickSort(arr,low,i - 1);
        quickSort(arr,i + 1,high);
    }
我想要达到的结果

知道每一行的含义

  • 写回答

1条回答 默认 最新

  • 燕少༒江湖 2022-09-04 13:26
    关注

    快速排序的基本思想。
    先从数组中找一个基准数
    让其他比它大的元素移动到数列一边,比他小的元素移动到数列另一边,从而把数组拆解成两个部分。
    再对左右区间重复第二步,直到各区间只有一个数。

    private static void quickSort(Integer[] arr, int low,int high){
            //当左边下标大于右边的下标,说明本轮已经完成比较了,直接退出
            if(low > high){
                return;
            }
            int i = low;
            int j = high;
            //哨兵
            int temp = arr[low];
            while (i < j){
                //找到右边大于左边的下标
                while (i < j && arr[j] >= temp){
                    j --;
                }
                //找到左边小于右边的下标
                while (i < j && arr[i] <= temp){
                    i ++;
                }
                //到这一步,说明左边大于右边的元素找到了,交换元素
                if(i < j){
                    int t = arr[i];
                    arr[i] = arr[j];
                    arr[j] = t;
                }
            }
            //哨兵移动到中间位置(比大的小,比小的大的位置)
            arr[low] = arr[i];
            arr[i] = temp;
            //这里为什么是 i - 1、i + 1:因为哨兵已经找到了它位置,不需要再移动了
            quickSort(arr,low,i - 1);
            //继续按照上面思路继续比较交互
            quickSort(arr,i + 1,high);
        }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 9月12日
  • 已采纳回答 9月4日
  • 创建了问题 9月4日

悬赏问题

  • ¥15 win2012 iscsi ipsec
  • ¥15 封装的 matplotlib animation 不显示图像
  • ¥15 python摄像头画面无法显示
  • ¥15 关于#3d#的问题:d标定算法(语言-python)
  • ¥15 cve,cnnvd漏洞扫描工具推荐
  • ¥15 图像超分real-esrgan网络自己训练模型遇到问题
  • ¥15 如何构建全国统一的物流管理平台?
  • ¥100 ijkplayer使用AndroidStudio/CMake编译,如何支持 rtsp 直播流?
  • ¥15 用js遍历数据并对非空元素添加css样式
  • ¥15 使用autodl云训练,希望有直接运行的代码(关键词-数据集)