当前位置: 首页 > news >正文

LeetCode--快速排序

文章目录

  • 1 排序原理
  • 2 代码实现

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);  
}

相关文章:

  • LVS-DR模式
  • android利用FFmpeg进行视频转换
  • Java中的常量管理:接口还是枚举,您如何选择?
  • 一、XSS加解密编码解码工具
  • c语言练习91:合并两个有序链表
  • 使用WPF模仿Windows记事本界面
  • 【单片机学习笔记】Windows+Vscode+STM32F4+freeRTOS+FatFs gcc环境搭建
  • 大学英语试卷
  • 数组的初始化以及拷贝
  • 使用GoogleNet网络实现花朵分类
  • 在Kubernetes(k8s)上部署整个SpringCloud微服务应用
  • Java IO流
  • 从零开始搭建第一个django项目
  • 使用序列化技术保存数据 改进 IO流完成项目实战水果库存系统
  • Kotlin中的内联函数:提升性能与解决Lambda表达式参数问题
  • 模拟器-雷电-使用adb push或adb pull操作文件
  • Android Studio初学者实例:RecyclerView学习--模仿今日头条--续
  • 向量检索库Milvus架构及数据处理流程
  • 如何系统 如何进行SQL监控-执行SQL分析打印
  • 【每日一练】20231023
  • 荣盛发展股东所持1.17亿股将被司法拍卖,起拍价约1.788亿元
  • 讲座|为什么要不断地翻译叶芝的诗?它们为什么值得细读?
  • 中央党校(国家行政学院)举行2025年春季学期第一批进修班毕业典礼
  • 民营经济促进法出台,自今年5月20日起施行
  • 中国公民在日本被机动车碾压身亡,我使馆发布提醒
  • 被算法重塑的世界,人与技术如何和谐共处