数据结构 (36)各种排序方法的综合比较
一、常见排序方法分类
插入排序类
- 直接插入排序:通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
- 希尔排序:是插入排序的一种改进版本,先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行依次直接插入排序。
选择排序类
- 简单选择排序:在未排序序列中找到最小(或最大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(或最大)元素,放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
- 堆排序:利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆积的性质,即子节点的键值或索引总是小于(或者大于)它的父节点。
交换排序类
- 冒泡排序:重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复进行的,直到没有再需要交换的元素为止。
- 快速排序:选择一个基准元素,通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。
归并排序
原理:采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。基数排序
原理:一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。计数排序
原理:不是基于比较的排序算法,其核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。
二、综合比较
时间复杂度
- 冒泡排序、简单选择排序、直接插入排序:最坏情况下时间复杂度为O(n^2),适用于数据量较小的情况。
- 希尔排序:时间复杂度依赖于增量序列的选择,但通常优于O(n^2)。
- 快速排序:平均时间复杂度为O(n log n),但在最坏情况下(如数组已经有序)时间复杂度为O(n^2)。通过优化,如随机选择基准元素,可以降低最坏情况的发生概率。
- 堆排序、归并排序:时间复杂度稳定为O(n log n),适用于数据量较大的情况。
- 基数排序、计数排序:时间复杂度为O(n+k),其中k与数据的具体分布有关。基数排序适用于整数排序且数据位数较多的情况;计数排序适用于数据范围较小且为整数的情况。
空间复杂度
- 冒泡排序、简单选择排序、直接插入排序:空间复杂度为O(1),即只需要常数级别的额外空间。
- 希尔排序:空间复杂度为O(1),但实现时可能需要额外的数组来存储增量序列。
- 快速排序:空间复杂度为O(log n),主要用于递归调用栈的空间开销。通过迭代实现可以降低空间复杂度,但可能增加代码复杂度。
- 堆排序:空间复杂度为O(1),但需要额外的空间来维护堆结构(通常在原数组上进行操作)。
- 归并排序:空间复杂度为O(n),需要额外的数组来存储合并后的结果。通过原地归并可以减少空间开销,但实现较为复杂。
- 基数排序、计数排序:空间复杂度为O(n+k),其中k与数据的具体分布有关。需要额外的数组来存储桶或计数结果。
稳定性
- 冒泡排序、直接插入排序、归并排序:稳定排序,即相等元素的相对顺序在排序前后保持不变。
- 简单选择排序、快速排序、堆排序:不稳定排序,即相等元素的相对顺序可能会发生变化。
- 希尔排序:不稳定排序,因为分组插入排序可能破坏相等元素的相对顺序。
- 基数排序:稳定排序,因为每次分配和收集操作都保持相等元素的相对顺序。
- 计数排序:稳定排序,因为计数和排序过程都保持相等元素的相对顺序。
适用场景
- 数据量较小且对稳定性有要求时,可以选择冒泡排序、直接插入排序或归并排序。
- 数据量较大且对空间复杂度有要求时,可以选择堆排序或快速排序(通过优化降低最坏情况的发生概率)。
- 数据为整数且位数较多时,可以选择基数排序。
- 数据范围较小且为整数时,可以选择计数排序。
结语
清醒时做事,糊涂时读书
大怒时睡觉,独处时思考
!!!
相关文章:

数据结构 (36)各种排序方法的综合比较
一、常见排序方法分类 插入排序类 直接插入排序:通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。希尔排序:是插入排序的一种改进版本,先将整个待排序的记录序列分割成为…...

使用vue搭建不需要打包的前端项目
需求详情:用户不要项目进行打包,开发还是选用vue2,且需要便于上手 项目目录 >api 存放api.js,主要是前端用到的接口 >css >>>fonts 存放页面需要的字体文件 >>>1.css 存放所有css文件 >data 存放echarts…...
发布订阅者=>fiber=>虚拟dom
文章目录 vue的响应式原理-发布订阅者模式vue3 响应式原理及优化fiberfiber 与 虚拟dom vue的响应式原理-发布订阅者模式 Vue响应式原理概述 Vue.js的响应式原理是其核心特性之一。它使得当数据发生变化时,与之绑定的DOM元素能够自动更新。其主要基于数据劫持和发布…...
Python-计算机中的码制以及基础运算符(用于分析内存)
记录python学习,直到学会基本的爬虫,使用python搭建接口自动化测试就算学会了,在进阶webui自动化,app自动化 python基础2-码制 计算机中的码制原码(True Form)反码(Ones Complement)…...

yum 离线软件安装
适用范围 支持YUM软件管理的操作系统: 银河麒麟 服务器操作系统V10统信服务器操作系统V20CentOS 系列 准备 准备一台可以连接互联网并且与离线安装的操作系统相同版本的操作系统,包括指令集类型相同。 安装下载工具 查询是否已经安装下载工具 yum…...

【C语言】17. 数据在内存中的存储
文章目录 一、整数在内存中的存储二、⼤⼩端字节序和字节序判断1、什么是⼤⼩端?2、为什么有⼤⼩端?3、练习1)练习12)练习23)练习34)练习45) 练习56)练习6 三、浮点数在内存中的存储1、浮点数的…...

二叉树概述
目录 一、二叉树的基本结构 二、二叉树的遍历 1.前序 2.中序 3.后序 4.层序遍历 三.计算二叉树的相关参数 1.计算节点总个数 2.计算叶子节点的个数 3.计算树的高度 4.计算第k层的子树个数 5.查找树中val为x的节点 四.刷题 1.单值二叉树 2.检查两棵树是否相同 3.一…...

【开源免费】基于SpringBoot+Vue.JS图书进销存管理系统(JAVA毕业设计)
博主说明:本文项目编号 T 082 ,文末自助获取源码 \color{red}{T082,文末自助获取源码} T082,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析…...

惠普M126a连接共享打印机故障0x000006ba,系统不支持请求的命令,print spooler重复停止
故障说明:直连惠普M126a打印机正常打印,通过共享连接的报故障。 目前已知有三种故障: 1、0x000006ba报错2、系统不支持请求的命令3、print spooler重复停止(或者,print spooler没有停止依然报故障) 解决方…...
Chainlit集成LlamaIndex实现一个通过用户聊天对话的酒店预定系统
Agent 简介 “Agent”是一个自动推理和决策引擎。它接受用户输入/查询,并为执行该查询做出内部决策,以便返回正确的结果。关键的代理组件可以包括但不限于: 把复杂的问题分解成小问题选择要使用的外部工具+调用工具的参数计划一系列的任务将以前完成的任务存储在内存模块中…...

计算机网络之网络层超详细讲解
个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 计算机网络之网络层超详细讲解 收录于专栏【计算机网络】 本专栏旨在分享学习计算机网络的一点学习笔记,欢迎大家在评论区交流讨论💌 …...

代码随想录算法训练营day51|动态规划part13
回文子串 回文子串这里的递推式不太一样,dp[i] 和 dp[i-1] ,dp[i 1] 看上去都没啥关系。所以要回归到回文的定义 而我们发现,判断一个子字符串(字符串下标范围[i,j])是否回文,依赖于,子字符串…...

ESP8266自制桌宠机器狗
看到别人的桌宠机器狗有没有想要拥有一台的冲动,其实我们可以使用少量的资金自制一台机器狗 1 硬件 esp8266芯片 舵机 超声波传感器 2 接线 ESP8266配件...

【力扣】409.最长回文串
问题描述 思路解析 因为同时包含大小写字母,直接创建个ASCII表大小的桶来标记又因为是要回文子串,所以偶数个数的一定可以那么同时,对于出现奇数次数的,我没需要他们的次数-1,变为偶数,并且可以标记出现过…...
git 拉取代码时报错 gitignore Please move or remove them before you merge.
git 拉取代码时报错, The following untracked working tree files would be overwritten by merge: .gitignore Please move or remove them before you merge. 当你在使用 Git 进行代码拉取(通常是执行 git pull 或 git merge 命令)时遇到这…...

19,[极客大挑战 2019]PHP1
这个好玩 看到备份网站字眼,用dirsearch扫描 在kali里打开 爆破出一个www.zip文件 访问一下 解压后是这个页面 class.php <?php include flag.php; error_reporting(0); class Name{ private $username nonono; private $password yesyes; publi…...

MQTT消息服务器mosquitto介绍及说明
Mosquitto是一个开源的消息代理软件,支持MQTT协议(消息队列遥测传输协议)。MQTT是一种轻量级的发布/订阅消息传输协议,专为低带宽、不可靠网络环境下的物联网设备通信而设计。以下是关于Mosquitto服务器的一些介绍和说明ÿ…...

uniapp结合movable-area与movable-view实现拖拽功能
前言 因为公司业务开发需要拖拽功能。 ps:该功能只能针对高度一致的,如果高度不一致需要另外二开 演示 开始 <template><view style"height: 100%;"><movable-area :style"{width: 100%, height: allHeight px}"…...
十九(GIT2)、token、黑马就业数据平台(页面访问控制(token)、首页统计数据、登录状态失效)、axios请求及响应拦截器、Git远程仓库
1. JWT介绍 JSON Web Token 是目前最为流行的跨域认证解决方案,本质就是一个包含信息的字符串。 如何获取:在使用 JWT 身份验证中,当用户使用其凭据成功登录时,将返回 JSON Web Token(令牌)。 作用…...

文生图模型开源之光!ComfyUI - AuraFlow本地部署教程
一、模型介绍 AuraFlow 是唯一一个真正开源的文生图模型,由Fal团队开源,其代码和权重都放在了 FOSS 许可证下。基于 6.8B 参数优化模型架构,采用最大更新参数化技术,还重新标注数据集提升指令遵循质量。在物体空间和色彩上有优势…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...

Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...

让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...
怎么让Comfyui导出的图像不包含工作流信息,
为了数据安全,让Comfyui导出的图像不包含工作流信息,导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo(推荐) 在 save_images 方法中,删除或注释掉所有与 metadata …...
Vue 模板语句的数据来源
🧩 Vue 模板语句的数据来源:全方位解析 Vue 模板(<template> 部分)中的表达式、指令绑定(如 v-bind, v-on)和插值({{ }})都在一个特定的作用域内求值。这个作用域由当前 组件…...