八大排序算法(2)交换排序-冒泡排序 和 快速排序
快速排序(Quick Sort) 和 冒泡排序(Bubble Sort) 都是常见的交换排序算法,它们的核心思想都是通过交换元素来实现排序。但是,它们的工作原理和性能差异非常大。下面我们来详细对比这两种排序算法:
1. 冒泡排序(Bubble Sort)
工作原理:
冒泡排序的基本思想是通过重复遍历数组,在每一轮中将未排序部分的最大元素“冒泡”到数组的末尾。
在每一轮中,比较相邻的元素,如果它们的顺序错误,就交换它们。这样,经过每一轮遍历,当前未排序部分的最大元素会被放到正确的位置。
这个过程持续进行,直到没有元素需要交换为止,数组被排序好。
时间复杂度:
最优时间复杂度:O(n)
,当数组已经是有序的时,冒泡排序只需要进行一次遍历就可以完成排序。
最坏时间复杂度:O(n^2)
,当数组是逆序的时,每一轮都需要进行大量的交换,导致时间复杂度达到平方级别。
平均时间复杂度:O(n^2)
,由于每次都需要比较和交换,尤其是对大规模数据集时,性能较差。
空间复杂度:
空间复杂度:O(1)
,冒泡排序是原地排序算法,不需要额外的存储空间。
稳定性:
稳定性:冒泡排序是稳定排序算法,相等的元素不会改变相对顺序。
优缺点:
优点:简单易懂,容易实现。
缺点:效率低,特别是对于大规模数据集时,不适用于大数据排序。
2. 快速排序(Quick Sort)
工作原理:
快速排序是一种分治法的排序算法。其基本思想是:选择一个基准元素(pivot),然后将数组中的元素分成两部分:
左边部分所有元素都小于基准元素
右边部分所有元素都大于基准元素
递归地对左右两部分进行排序,直到数组完全有序。
快速排序的核心是通过分区操作将数组分成两部分,每次递归地进行排序。
时间复杂度:
最优时间复杂度:O(n log n)
,每次分区都能均匀地将数组分成两半,递归深度为 log n
,每次分区操作的时间为 O(n)
。
最坏时间复杂度:O(n^2)
,当基准元素选得不好(如每次选到最大或最小元素)时,划分不均匀,导致递归的深度接近 n
,此时性能与冒泡排序类似。
平均时间复杂度:O(n log n)
,通常情况下,快速排序的时间复杂度非常好,适用于大规模数据。
空间复杂度:
空间复杂度:O(log n)
,由于递归调用,最多需要 log n
的栈空间。
稳定性:
稳定性:快速排序通常不是稳定排序。因为相等的元素可能会被交换位置,导致它们的相对顺序发生变化。
优缺点:
优点:平均时间复杂度 O(n log n)
,非常高效,特别适用于大规模数据排序。
缺点:最坏情况下时间复杂度为 O(n^2)
,而且不是稳定的排序。
快速排序与冒泡排序的对比
特性 | 冒泡排序 | 快速排序 |
---|---|---|
时间复杂度 | 最优:O(n) ,最坏:O(n^2) ,平均:O(n^2) | 最优:O(n log n) ,最坏:O(n^2) ,平均:O(n log n) |
空间复杂度 | O(1) | O(log n) |
稳定性 | 稳定 | 不稳定 |
实现难度 | 简单,易于理解 | 相对复杂,需要递归和分区操作 |
适用场景 | 小规模数据,或者数据几乎已经有序时 | 大规模数据,性能优于冒泡排序 |
优缺点 | 优:实现简单,缺:效率低 | 优:高效,缺:可能会退化为 O(n^2) ,不稳定 |
相关文章:

八大排序算法(2)交换排序-冒泡排序 和 快速排序
快速排序(Quick Sort) 和 冒泡排序(Bubble Sort) 都是常见的交换排序算法,它们的核心思想都是通过交换元素来实现排序。但是,它们的工作原理和性能差异非常大。下面我们来详细对比这两种排序算法࿱…...

Python的那些事第二十三篇:Express(Node.js)与 Python:一场跨语言的浪漫邂逅
摘要 在当今的编程世界里,Node.js 和 Python 像是两个性格迥异的超级英雄,一个以速度和灵活性著称,另一个则以强大和优雅闻名。本文将探讨如何通过 Express 框架将 Node.js 和 Python 结合起来,打造出一个高效、有趣的 Web 应用。我们将通过一系列幽默风趣的实例和表格,展…...
STM32MP157A单片机移植Linux驱动
在stm32mp157a单片机移植Linux操作系统,并移植内核驱动,在应用程序中使用3个线程,分别实现控制单片机上3个led流水灯的功能、蜂鸣器控制的功能、风扇控制的功能。 需求整理: 1.驱动程序-->led1.c,led2.cÿ…...
Qt程序退出相关资源释放问题
目录 问题背景: aboutToQuit 代码举例 closeEvent事件 代码举例 程序退出方式 quit() exit(int returnCode 0) close() 问题背景: 实际项目中程序退出前往往需要及进行一些资源释放、配置保存、线程中断等操作,避免资源浪费ÿ…...
【大学生职业规划大赛备赛PPT资料PDF | 免费共享】
自取链接: 链接:https://pan.quark.cn/s/4fa45515325e 📢 同学,你是不是正在为职业规划大赛发愁? 想展示独特思路却不知如何下手? 想用专业模板却找不到资源? 别担心!我整理了全网…...

win32汇编环境,对话框中使用菜单示例一
;运行效果 ;win32汇编环境,对话框中使用菜单示例一 ;最基本的应用,即添加菜单及点击后响应的操作方法 ;直接抄进RadAsm可编译运行。重要部分加备注。 ;下面为asm文件 ;>>>>>>>>>>>>>>>>>>>>>>&g…...
AutoDock CrankPep or ADCP进行蛋白质多肽对接
需求描述 使用AutoDock CrankPep or ADCP进行蛋白质多肽对接 硬件及系统配置 自用电脑型号如下: 电脑:Precision Tower 7810 (Dell Inc.) CPU : Intel Xeon CPU E5-2686 v4 2.30GHz GPU: NVIDIA GeForce GTX 1070 Linux版本&a…...
高压直流熔断器研究
1.1 定义与作用 高压直流熔断器是一种用于直流电路的过电流保护装置,其主要作用是在电路中检测到过载电流或短路电流时,迅速切断电路,以防止电力设备受损或发生火灾等事故。根据 ISO-8820 和 QC/T420-2004 等标准的定义,熔断器是…...

微信小程序(uni)+蓝牙连接+Xprint打印机实现打印功能
1.蓝牙列表实现,蓝牙设备展示,蓝牙连接 <template><view class"container"><view class"container_top"><view class"l">设备名称</view><view class"r">{{state.phoneNam…...
使用 Docker 部署 Flask 应用
使用 Docker 部署 Flask 应用 一、引言 在现代软件开发中,应用的部署和环境管理是至关重要的环节。传统的部署方式常常会遇到 “在我机器上能运行,在你机器上不行” 的问题,而 Docker 的出现很好地解决了这个痛点。Docker 是一个用于开发、部署和运行应用程序的开放平台,…...

深入浅出GraphQL:现代API设计的未来
文章目录 一、引言二、什么是GraphQL?三、GraphQL的优势3.1 精确获取数据3.2 强类型系统3.3 单一端点3.4 实时数据 四、实际应用4.1 定义Schema4.2 实现解析器4.3 启动GraphQL服务器 五、结论 一、引言 在当今的 Web 开发中,API(应用程序编程…...
深入理解Zookeeper:分布式系统的协调者
引言 在现代分布式系统中,协调和管理多个节点之间的状态和行为是一个复杂且关键的任务。Zookeeper作为一个分布式协调服务,为开发者提供了一种高效、可靠的方式来处理分布式系统中的一致性问题。本文将介绍Zookeeper的基本概念、使用场景以及如何通过示…...
python绘图之回归拟合图
回归拟合图在数据分析中具有重要作用,它不仅可以帮助我们理解变量之间的关系,还可以评估模型的拟合效果、进行预测和推断、发现异常值,以及用于模型比较和结果展示。 import pandas as pd import seaborn as sns import matplotlib.pyplot as…...

C语言学习笔记(第二部份)
说明:由于所有内容放在一个md文件中会非常卡顿,本文件将接续C.md文件的第二部分 结构体 结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。 结构体的成员可以是标量,数组,指针,…...
jQuery UI CSS 框架 API
jQuery UI CSS 框架 API 概述 jQuery UI 是一个基于 jQuery 的用户界面和交互库,它提供了一套丰富的交互组件和视觉效果,旨在帮助开发者快速构建具有吸引力和互动性的网页应用。jQuery UI CSS 框架 API 是 jQuery UI 的一部分,它允许开发者通过简单的 CSS 类来控制 UI 组件…...

Redis7——基础篇(六)
前言:此篇文章系本人学习过程中记录下来的笔记,里面难免会有不少欠缺的地方,诚心期待大家多多给予指教。 基础篇: Redis(一)Redis(二)Redis(三)Redis&#x…...

Windows网络安全基础
随着互联网的发展和普及,Windows网络安全问题愈发严重。在本文中,我们将会介绍Windows网络安全的基本概念,包括网络攻击类型、网络安全威胁、网络安全防御措施等等,帮助初学者更好地了解Windows网络安全。 一、网络攻击类型 网络…...
spring boot知识点4
1.如何监视所有spring boot微服务 安装actuator插件,然后通过接口查询 /actuator/health 2.spring boot项目性能如何优化 a.优化启动时间,去除重复的依赖 b.JVM优化(java虚拟机优化),限制堆的最小最大值 c.数据库…...

【大模型系列篇】DeepSeek-R1如何通过强化学习有效提升大型语言模型的推理能力?
如何通过强化学习(RL)有效提升大型语言模型(LLM)的推理能力? 《DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning》由DeepSeek-AI团队撰写,主要介绍了他们开发的第一代…...

主表增一个子表批量新增
1、在新增接口里,先随机生成编码,生成RedisLock,逻辑校验,Dto转bean,新增主表,获取主表的ID,新增子表,最后释放锁 2、在修改接口里,获取主表ID,先修改主表&am…...

超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...

Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...

Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

代码规范和架构【立芯理论一】(2025.06.08)
1、代码规范的目标 代码简洁精炼、美观,可持续性好高效率高复用,可移植性好高内聚,低耦合没有冗余规范性,代码有规可循,可以看出自己当时的思考过程特殊排版,特殊语法,特殊指令,必须…...

水泥厂自动化升级利器:Devicenet转Modbus rtu协议转换网关
在水泥厂的生产流程中,工业自动化网关起着至关重要的作用,尤其是JH-DVN-RTU疆鸿智能Devicenet转Modbus rtu协议转换网关,为水泥厂实现高效生产与精准控制提供了有力支持。 水泥厂设备众多,其中不少设备采用Devicenet协议。Devicen…...

消防一体化安全管控平台:构建消防“一张图”和APP统一管理
在城市的某个角落,一场突如其来的火灾打破了平静。熊熊烈火迅速蔓延,滚滚浓烟弥漫开来,周围群众的生命财产安全受到严重威胁。就在这千钧一发之际,消防救援队伍迅速行动,而豪越科技消防一体化安全管控平台构建的消防“…...
[USACO23FEB] Bakery S
题目描述 Bessie 开了一家面包店! 在她的面包店里,Bessie 有一个烤箱,可以在 t C t_C tC 的时间内生产一块饼干或在 t M t_M tM 单位时间内生产一块松糕。 ( 1 ≤ t C , t M ≤ 10 9 ) (1 \le t_C,t_M \le 10^9) (1≤tC,tM≤109)。由于空间…...