• LeetCode--快速排序


    1 排序原理

    quickSort(int[] arr, int left, int right) 参数描述

    • arr: 待排序的数组
    • left: 排序的左边位置
    • right: 排序的右边位置

    排序步骤:

    1. 先选取左边节点的数据作为 pivot
    2. 从右边开始, 向左遍历节点数据, 在满足right > left 条件前提下:

    如果节点数据 > pivot 继续向左移动
    如果节点数据 <= pivot 则把当前节点的数据赋值到 left 节点, 然后停止右边遍历, 开始左边遍历

    1. 从左边开始, 向右遍历节点数据, 在满足left > right 条件前提下:

    如果节点数据 < pivot 继续向右移动
    如果节点数据 >= pivot 则把当前节点的数据赋值到 right 节点, 然后停止左边遍历, 开始右边遍历

    1. 当 left 和 right 重合后, 此次遍历结束, 把 pivot 赋值到重合节点, pivot节点左边为左数组, 右边的为右数组

    对左数组递归调用执行 1,2,3 步骤
    对右数组递归调用执行 1,2,3 步骤

    1. 完成快速排序

    2 代码实现

    public static void main(String[] args) {  
        int[] arr = {5, 3, 8, 5, 4, 2};  
        quickSort(arr, 0, arr.length - 1);  
        System.out.println("排序后的数组:" + Arrays.toString(arr));  
    }  
      
    public static void quickSort(int[] arr, int left, int right) {  
        if (left >= right) {  
            return;  
        }  
        // 选取最左边的元素作为枢轴  
        int pivot = arr[left];  
        int i = left;  
        int j = right;  
        while (i < j) {  
            // 先从右边开始找小于枢轴的元素  
            while (i < j && arr[j] >= pivot) {  
                // 如果没有找到, 就继续往左边找  
                j--;  
            }  
            // 在右边找到小于枢轴的元素后, 将其赋值给左边位置的元素  
            arr[i] = arr[j];  
            // 然后从左边开始找大于枢轴的元素  
            while (i < j && arr[i] <= pivot) {  
                // 如果没有找到, 就继续往右边找  
                i++;  
            }  
            // 在左边找到大于枢轴的元素后, 将其赋值给右边位置的元素  
            arr[j] = arr[i];  
        }  
        // 当 left == right 时, 把 pivot 赋值给 arr[i]    arr[i] = pivot;  
        // 递归调用  
        // 对 pivot 位置左边进行快速排序  
        quickSort(arr, left, i - 1);  
        // 对 pivot 位置右边进行快速排序  
        quickSort(arr, i + 1, right);  
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
  • 相关阅读:
    1023 Have Fun with Numbers
    Excel中输入整数却总是显示小数,如何调整?
    云原生之深入解析如何合并多个kubeconfig文件
    药物化合物信息查询系统(精选常用的5个)
    C# Onnx Yolov8 Seg 分割
    leetcode_2698求一个整数的惩罚数
    安全行业基础知识学习
    sonic-ios-bridge(sib)使用
    /etc/profile文件与.bashrc文件的作用
    前端URL拼接路径参数
  • 原文地址:https://blog.csdn.net/weixin_57672329/article/details/133991332