LeetCode--快速排序

news/2024/5/19 21:45:25 标签: 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);  
}

http://www.niftyadmin.cn/n/5116360.html

相关文章

十月杂题选做

https://codeforces.com/contest/474/problem/F 给一个长为 n n n 的序列&#xff0c; q q q 次询问区间 g c d gcd gcd 的个数 线段树维护区间 g c d , m i n gcd,min gcd,min 以及最小值的出现次数&#xff0c;判断区间最小值等于 g c d gcd gcd即可 https://codeforce…

cocosCreator 之 Toggle和ToggleContainer复选框的使用和拓展

版本&#xff1a; 3.4.0 语言&#xff1a; TypeScript 环境&#xff1a; Mac 简介 复选框的使用&#xff0c;在cocosCreator中主要有两个组件&#xff1a; Toggle 用于实现复选框CheckBoxToggleContainer 不可见&#xff0c;一般不会单独使用&#xff0c;多用于配合多个Togg…

基于Java的线上花店管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09; 代码参考数据库参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…

C++中的多态以及如何实现多态(近万字图文详解)

C中的多态 1. 多态的概念1.1 概念 2. 多态的定义及实现2.1多态的构成条件&#xff08;重点&#xff09;2.2 虚函数2.3 虚函数的重写(重点)2.4 C11 override 和 final2.5 重载、覆盖(重写)、隐藏(重定义)的对比 3. 抽象类3.1 概念3.2 接口继承和实现继承 4. 多态的原理4.1虚函数…

第01章-Java语言概述

目录 1 常见DOS命令 常用指令 相对路径与绝对路径 2 转义字符 3 安装JDK与配置环境变量 JDK与JRE JDK的版本 JDK的下载 JDK的安装 配置path环境变量 4 Java程序的编写与执行 5 Java注释 6 Java API文档 7 Java核心机制&#xff1a;JVM 1 常见DOS命令 DOS&#xff08;…

1000*A. Little Artem(构造)

Problem - 1333A - Codeforces 解析&#xff1a; 只需要在左上角放一个白色&#xff0c;其余都放黑色即可满足条件。 #include<bits/stdc.h> using namespace std; int t,n,m; signed main(){scanf("%d",&t);while(t--){scanf("%d%d",&n,&…

uniapp中nvue页面使用fixed后,数据更改不更新到该视图。

解决方案&#xff1a;position: fixed;定位改成position: absolute; 记录一下&#xff0c;遇到这个贼离谱的问题&#xff0c;uniapp项目里的nvue页面因为要弄个引导蒙版&#xff0c;所以使用了fixed定位&#xff0c;点击蒙版关闭&#xff0c;加了this.$forceUpdate()也不行&am…

安全、高效远程访问大数据分析平台解决方法:Splunk Enterprise+Cpolar

文章目录 前言1. 搭建Splunk Enterprise2. windows 安装 cpolar3. 创建Splunk Enterprise公网访问地址4. 远程访问Splunk Enterprise服务5. 固定远程地址 前言 Splunk Enterprise是一个强大的机器数据管理平台&#xff0c;可帮助客户分析和搜索数据&#xff0c;以及可视化数据…