(笔记)快速排序

快速排序

快速排序是一种常用的排序算法。它的时间复杂度为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://www.mzph.cn/news/5701.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vite + Vue3 + Ts 【免key、免账号实战本地运行GPT】

&#x1f414; 前期回顾 Vue3 Ts Vite —— 封装庆祝彩屑纷飞 示例_彩色之外的博客-CSDN博客封装 彩屑纷飞 示例https://blog.csdn.net/m0_57904695/article/details/131718019?spm1001.2014.3001.5501 目录 &#x1f30d; 公网 &#x1f6f9; 本地 &#x1fa82; 源码 &…

【前端|CSS系列第4篇】CSS布局之网格布局

前言 最近在做的一个项目前台首页有一个展示词条的功能&#xff0c;每一个词条都以一个固定大小的词条卡片进行展示&#xff0c;要将所有的词条卡片展示出来&#xff0c;大概是下面这种布局 每一行的卡片数目会随着屏幕大小自动变化&#xff0c;并且希望整个卡片区域周围不要…

20230721 Essex UK, Dongbing Gu 公开讲座--机器人前沿

个人主页&#xff1a; https://www.essex.ac.uk/people/GUDON81301/dongbing-gu 机器人领域任务的特点&#xff1a;dull, dirty, dangerous tasks in remote spaces 机器鱼&#xff1a; 实时港口环境监测 机器鱼群探索算法 化学传感器 水面声呐定位系统/SLAM/通信问题 Robotic …

C—数据的储存(下)

文章目录 前言&#x1f31f;一、练习一下&#x1f30f;1.例一&#x1f30f;2.例二&#x1f30f;3.例三&#x1f30f;4.例四 &#x1f31f;二、浮点型在内存中的储存&#x1f30f;1.浮点数&#x1f30f;2.浮点数存储&#x1f4ab;&#xff08;1&#xff09;.二进制浮点数&#x…

QDialog的两种显示方式

QDialog的两种显示方式 模态显示非模态显示 QDialog不能嵌入到其他窗口中显示&#xff08;无论继承与否&#xff09; 模态显示 d->exec(); 阻塞程序的执行 非模态显示 d->show(); 不阻塞程序

OpenCV4图像处理-图像交互式分割-GrabCut

本文将实现一个与人&#xff08;鼠标&#xff09;交互从而分割背景的程序。 GrabCut 1.理论介绍2. 鼠标交互3. GrabCut 1.理论介绍 用户指定前景的大体区域&#xff0c;剩下为背景区域&#xff0c;还可以明确指出某些地方为前景或者背景&#xff0c;GrabCut算法采用分段迭代的…

MySQL主从复制与读写分离

文章目录 一.前言二.主从复制原理1.MySQL的复制类型2.MySQL主从复制的工作过程2.1 MysQL主从复制延迟原因2.2问题解决方法2.3 MySQL 有几种同步方式2.3.1 异步复制2.3.2 同步复制2.3.3 半同步复制2.3.4 增强半同步复制&#xff08;lossless Semi-Sync Replication、无损复制&am…

消息队列 CKafka 跨洋数据同步性能优化

导语 本文主要介绍了 CKafka 在跨洋场景中遇到的一个地域间数据同步延时大的问题&#xff0c;跨地域延时问题比较典型&#xff0c;所以详细记录下来做个总结。 一. 背景 为了满足客户跨地域容灾、冷备的诉求&#xff0c;消息队列 CKafka 通过连接器功能&#xff0c;提供了跨…

进程控制学习笔记

文章目录 进程退出孤儿进程僵尸进程进程回收waitpid()函数 进程退出 子进程的退出需要父进程对其资源的释放&#xff0c;子进程只能对用户区的数据进行释放&#xff0c;无法完成对内核区的释放。 可以获取到。 两个退出的区别&#xff1a; 系统调用不会刷新缓冲区&#xff…

Kubernetes对象深入学习之四:对象属性编码实战

欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码)&#xff1a;https://github.com/zq2599/blog_demos 本篇概览 本文是《Kubernetes对象深入学习》系列的第四篇&#xff0c;前面咱们读源码和文档&#xff0c;从理论上学习了kubernetes的对象相关的知识&#xff…

python识别极验4滑块验证码实战

闲得无聊&#xff0c;趁着休息研究了一下极验4滑块验证码的安全性&#xff0c;是否有机器识别、自动化拖拽的可能性。首先看一下效果 如何识别验证码 1、下载图片 下载图片可以参考博客《采集极验4滑块验证码图片数据》 2、标记图片 3、标记滑动距离 实现代码 __author__ &…

【C++】C++11

文章目录 C111. 统一的列表初始化1.1 {}初始化 2. 声明2.1 auto2.2 decltype2.3 nullptr 3. 右值引用和移动语义3.1 左值引用和右值引用3.2 左值引用与右值引用比较3.3 右值引用使用的场景和意义3.4 完美转发 4. 可变参数模板5. lambda表达式5.1 函数对象与lambda表达式 6. 线程…

STM32入门之创建工程模板

1.STM32固件库的结构图如下。从图中可以看出&#xff0c;我们在配置STM32的固件库时需要配置用户层、CMSIS层的文件。配置库文件即正确的配置这些函数的文件。CMSIS(Cortex Microcontroller Software Interface Standard)是ARM公司提供的微控制器软件接口标准&#xff0c;所有使…

macos M1安装多个版本jdk

1、安装jdk 8 到 oracle 官网 https://www.oracle.com/java/technologies/javase/javase8u211-later-archive-downloads.html 找到 macOS x64 DMG Installer 后面的下载链接下载安装包 java的jdk 都安装在以下目录 ls /Library/Java/JavaVirtualMachines/jdk-1.8.jdk jdk-1…

Data Structure, Algorithm,and Applications in C++

在学习这本书进阶内容之前&#xff0c;我们可以跟着它的第一章部分再巩固和复习。本书由Sartaj Sahni撰写&#xff0c;由王立柱和刘志红翻译。全书通俗易懂&#xff0c;内容丰富&#xff0c;是巩固C内容的不二选择。希望本文对各位有所帮助。 目录 1.函数与参数 1.1.传值参数…

C++初探

目录 经典开头 — C的历史 作用域运算符 using的用法 命名空间 - namespace 命名空间的基本使用 特殊的命名空间 - 无名命名空间 全部展开和部分展开 std — C所有的标准库都在std命名空间内 省缺值 - 默认参数 占位参数 内联函数 - inline 函数重载 函数重载的用…

【Unity2D】相机移动以及设置相机边界

添加相机 添加相机时&#xff0c;首先需要在unity中添加 Cinemachine 包 第一次使用这个包时&#xff0c;需要在Package Manager中搜索并安装 安装Camera Mechine包后&#xff0c;添加2D Camera 设置跟随对象为Ruby &#xff08;从Hierarchy中将Ruby拖动到Follow中&#xff0…

kafka 2.1.1 java的消费者客户端如何获取数据源码

KafkaConsumer 一、kakfa消费者暴露给业务系统获取数据的方法1 首先从缓冲区队列取数&#xff0c;没有数据则请求服务端来获取数据1.1循环从队列中取数&#xff0c;给到空或者已被提取的nextInLineRecords(1)当nextInLineRecords的数据被提取时&#xff0c;就把nextInLineRecor…

c函数学习

函数的概念 函数是c语言的功能单位&#xff0c;实现一个功能可以封装一个函数来实现。定义函数的时候一切以功能为目的&#xff0c;根据功能去定义函数的参数和返回值 函数的分类 从定义角度分类&#xff1a;库函数&#xff08;c库实现的&#xff09;&#xff0c;自定义函数&…

一、大数据技术之Flume(简介)

第1章 Flume概述 1.1 Flume定义 Flume是Cloudera提供的一个高可用的&#xff0c;高可靠的&#xff0c;分布式的海量日志采集、聚合和传输的系统。Flume基于流式架构&#xff0c;灵活简单。 1.2 Flume基础架构 Flume组成架构如下图所示。 1.2.1 Agent Agent是一个JVM进程&…