(笔记)快速排序

news/2024/7/7 20:00:18

快速排序

快速排序是一种常用的排序算法。它的时间复杂度为O(nlogn),并且在实际应用中表现良好。快速排序的基本思想是通过选择一个基准数,将数组分成两个子数组,比基准数小的放在左边,比基准数大的放在右边,然后对左右子数组分别递归地进行快速排序。

以下是使用 Java 实现的快速排序代码:

public class QuickSort {
    public void sort(int[] arr, int left, int right) {
        if (left >= right) return;
        int pivot = partition(arr, left, right);
        sort(arr, left, pivot - 1);
        sort(arr, pivot + 1, right);
    }

    private int partition(int[] arr, int left, int right) {
        int pivot = arr[left];
        int i = left + 1, j = right;
        while (i <= j) {
            if (arr[i] < pivot) {
                i++;
            } else if (arr[j] >= pivot) {
                j--;
            } else {
                swap(arr, i, j);
            }
        }
        swap(arr, left, j);
        return j;
    }

    private void swap(int[] arr, int i, int j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
}

快速排序的时间复杂度为 O(nlogn),其中 n 表示数组的大小。这是因为快速排序每次将数组分成两个子数组,并对每个子数组进行递归排序。在最好情况下,即每次划分都将数组划分为大小相等的两个子数组时,在最坏情况下,即每次划分都只得到一个子数组时,但是,由于快速排序的常数因子比较小,因此在实践中表现良好。

快速排序通常用于需要对大量数据进行排序时。由于其时间复杂度比一些其他排序算法(如归并排序)高,因此在数据量较小的情况下,可能不如其他算法效率高。但是,由于快速排序的常数因子比较小,因此当数据量较大时,快速排序往往比其他算法更快。此外,快速排序还具有空间复杂度低的优点,因为它可以在原地对数组进行排序。

总之,快速排序是一种非常实用的排序算法,尤其适用于需要对大量数据进行排序的情况。


http://lihuaxi.xjx100.cn/news/1358923.html

相关文章

哈佛“聘请”AI担任导师,主讲教授:别全信它的,学生应“批判性地思考”

就在人们为AI聊天机器人的利弊争论不休时&#xff0c;哈佛宣布了一个重磅决定&#xff1a;将利用类似ChatGPT的聊天机器人来帮助授课了。 负责的还是计算机系的旗舰项目 —— 计算机科学导论&#xff0c;也就是著名的 CS50。借助机器人导师&#xff0c;哈佛的 CS50 项目将拥有…

6.4.1 互联网路由探测与发现(一)----ping命令与tracert命令

6.4.1 互联网路由探测与发现&#xff08;一&#xff09; 对于路由探测和发现是非常实用的互联网应用&#xff0c;因为他可以协助网络管理和维护人员进行网络故障的诊断和排查。我们就来熟悉一下路由跟踪程序的使用方法并结合网络协议分析软件分析并深入理解路由跟踪所涉及到协…

使用Electron包装ruoyi-ui/ruoyi-vue实践总结

背景&#xff1a;最近公司新起的项目&#xff0c;由于工期、资源等原因&#xff0c;采用ruoyi框架快速实现开发&#xff0c;由于需要构建客户端&#xff0c;所以借助electron来实现。 electron 是使用javascript html css来构建跨平台的桌面应用程序。 官网地址&#xff1a;简介…

银河麒麟系统挂载的home文件夹无执行权限

银河麒麟系统挂载的home文件夹里放可执行程序&#xff0c;脚本无法运行&#xff0c;最后修改/etc/fstab文件如下所示就可以了 修改完重启电脑就可以执行可执行程序了

vscode报警和报错没有颜色

前言 解决方法来源 https://www.zhihu.com/question/506531863 解决步骤 安装IPython conda install IPython打开/anaconda3/envs/mmagic3/lib/python3.8/site-packages&#xff0c;然后创建一个文件&#xff0c;sitecustomize.py&#xff0c;里面写入 import sys frome IP…

Centos 7 使用国内镜像源更新内核

内核选择参考 此博文 &#xff1a;https://blog.csdn.net/alwaysbefine/article/details/108931626 elrepo官网介绍的内核升级方式为&#xff1a; 一、按文档执行引入 elrepo库&#xff1b; # 1、引入公钥 rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org# 2、安…

php做网页版剪刀石头布的功能

实例讲述了php实现的网页版剪刀石头布攻略在玩游网上的设计。分享给大家供大家参考&#xff0c;具体如下&#xff1a; <?php /* * Created on 2016-11-25 * */ if (isset($_POST[sub])) { $what $_POST[what]; //需要输入的数组 $my_array array("剪刀","…

JAVAweb 04

第四章 多表查询、事务与DCL 多表查询&#xff1a;事务:DCL&#xff1a; 多表查询&#xff1a; 查询语法&#xff1a; select 列名列表 from 表名列表 where… 准备sql 创建部门表 CREATE TABLE dept( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20) ); INSERT INTO de…