八大排序算法(2)交换排序-冒泡排序 和 快速排序

ops/2025/2/22 19:17:49/

快速排序(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),不稳定

http://www.ppmy.cn/ops/160207.html

相关文章

前端新手如何从CtrlC+V开始?(前端开源UI平台汇总)

前言 如果你是个前端小白,面对一堆满屏的div标签和css就头晕眼花?别担心,咱都是从“代码搬运工” 开始的。当你的同桌还在和flex布局玩"你动我猜"的时候,你已经像拼乐高一样把现成的按钮组件搭成炫酷界面。这可不是作弊…

4.从零开始学会Vue--{{组件通信}}

1.组件的注意点 1.template只能有一个根元素 约束:.vue文件中的template中如果写了两个元素,则会报如下错误 解决:保证template中只有一个根元素即可 2.scoped解决样式冲突 1全局样式: 默认组件中的样式会作用到全局,任何一个组…

用deepseek学大模型04-模型可视化与数据可视化

deepseek.com: pytorch可视化工具 生成神经网络图 在 PyTorch 中,可视化神经网络结构的常用工具和方法有以下几种,以下将详细介绍它们的用法: 1. TensorBoard (PyTorch 官方集成) PyTorch 通过 torch.utils.tensorboard 支持 TensorBoard&a…

数据结构者

数据(data):可被计算机接受处理的符号总称 数据元素(data element):数据的基本单位,常作为一个整体进行考虑和处理 一个数据元素可以由若干个数据项(data item)组成 数…

ctfshow-ssti-web361-372-wp

初学建议 今天开始学习ssti,分享几篇文章,由易到难,初学者仔细看完,基本上可以上手了。 SSTI 注入 - Hello CTF //这篇一定要认真看,一定!一定!一定! 1. SSTI(模板注…

【C++委托与事件】函数指针,回调机制,事件式编程与松耦合的设计模式(上)

前言 上一次发文章已经是在两个月前了hhh,期间也是忙忙碌碌做了不少事情也鸽了不少东西… 本文我们来讲讲博主最近在项目中频繁使用的,也就是广泛运用于C#或者Java的一个常用编程机制(思路)-----委托和事件。由于C在语言特性上没…

Mac端homebrew安装配置

拷打了一下午o3-mini-high,不如这位博主的超强帖子,10分钟结束战斗 跟随该文章即可,2025/2/19亲测可行 mac 安装HomeBrew(100%成功)_mac安装homebrew-CSDN博客文章浏览阅读10w次,点赞258次,收藏837次。一直觉得自己写…

Elasticsearch7.1.1 配置密码和SSL证书

生成SSL证书 ./elasticsearch-certutil ca -out config/certs/elastic-certificates.p12 -pass 我这里没有设置ssl证书密码,如果需要设置密码,需要再配置给elasticsearch 在之前的步骤中,如果我们对elastic-certificates.p12 文件配置了密码…