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日

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度