十大排序简介
十大排序简介
- 一、排序分类
- 二、排序思路
- 1.冒泡排序(Bubble Sort)
- 2.选择排序(Selection Sort)
- 3.插入排序(Insertion Sort)
- 4.希尔排序(Shell Sort)
- 5.归并排序(Merge Sort)
- 6.快速排序(Quick Sort)
- 7.堆排序(Heap Sort)
- 8.计数排序(Counting Sort)
- 9.基数排序(Radix Sort)
- 10.桶排序(Bucket Sort)
- 三、 稳定性
- 四、时空复杂度
十大排序是在计算机地界儿最常用和最重要的排序算法,分别是:冒泡、选择、插入、希尔、归并、快速、堆、计数、基数、桶。
速记:冒(帽)选插(差)希(西)归,快堆计(妓)基(鸡)桶。帽子都能给爷选差了,要你们有什么用?送你们回西天吧!来来来,快把这些吃闲饭的歌妓和小鸡都堆到桶里,拎到西天送给佛祖。
一、排序分类
按照排序的实现方式,十种排序算法可分为:
1.比较类排序:
- 交换类:冒泡排序、快速排序。
- 插入类:插入排序、希尔排序。
- 选择类:选择排序、堆排序。
- 归并类:归并排序。
2.非比较类排序:计数排序、桶排序、基数排序。
二、排序思路
以从小到大排序为例,各排序算法思路如下。
1.冒泡排序(Bubble Sort)
将列表分为两部分,左无序,右有序。遍历时比较相邻两元素,顺序不对就交换,每遍历一次就能将无序列表中的最大元素逐步“冒泡”到列表的末尾。这样重复遍历无序列表,就能实现整个列表的排序。
时间复杂度:O(n2)
2.选择排序(Selection Sort)
左无序,右有序。每次从无序列表中选择最大值,放在最后(交换)。
时间复杂度:O(n2)
3.插入排序(Insertion Sort)
左有序,右无序。将无序列表第一个元素往前移动,放在第一个比它小的数的后边,从而得到新的有序列表。
时间复杂度:O(n^2)(对于大部分情况),O(n) 在最佳情况下(数据已接近有序)
4.希尔排序(Shell Sort)
是插入排序的一种改进版本,通过先比较距离较远的元素,再逐步缩小间隔进行插入排序。
插入排序的增量可视为1,在某些极端情况下效率较差。而希尔排序改为设立增量序列,按增量序列执行多次插入排序。
希尔排序的时间复杂度与增量序列的选取有关,一般用n除以2一直除到1的序列,但不是最优算法。
时间复杂度:取决于间隔序列的选择,通常为 O(n7/6)。
5.归并排序(Merge Sort)
采用分治法,先分后合。即先将列表分成两半分别排序,再合并已排序的两部分。
时间复杂度:O(n log n)。
空间复杂度:O(n)(需要额外的存储空间用于合并)
6.快速排序(Quick Sort)
采用分治法,在列表中选择一个基准值,然后分区(将列表分割成两部分,比基准值小的放在左侧,大的放在右侧),然后递归每个分区(即按上面的方面此这两部分数据分别进行快速排序)。
快速排序的基准值选择不当可能导致时间复杂度退化,解决办法有随机选值(随机选取基准值)、三数取中(头尾中,三数取中间值作为基准值)等。
时间复杂度:O(n log n)(平均情况),O(n^2)(最坏情况,但可以通过随机选择基准元素等方法改进)
7.堆排序(Heap Sort)
将无序部分构建成一个大顶堆,然后依次堆顶元素(最大值)与末尾元素交换,并重新调整堆结构。算法类似于选择排序。
时间复杂度:O(n log n)
空间复杂度:O(1)(原地排序/就地排序)
8.计数排序(Counting Sort)
适用于一定范围内的整数排序,通过计数元素出现的次数来确定每个元素在排序后的位置。
具体方法是借助数组下标有序,先存入数组并统计个数,再遍历赋值回原数组。
时间复杂度:O(n + k)(k 是待排序数据的范围)
空间复杂度:O(k)
9.基数排序(Radix Sort)
按位(从最低有效位到最高有效位或从最高有效位到最低有效位)对数字进行排序,通常使用计数排序作为子过程。
从最低有效位到最高有效位的基数排序,可以设立0~9十个桶数组,将待排序数按个位放入桶中,依次拿出,再按十位、百位,重复上述过程。
时间复杂度:O(n * k)(k 是数字的最大位数)
空间复杂度:O(n + k)(取决于使用的计数排序的空间需求)
10.桶排序(Bucket Sort)
将待排序数据分到有限数量的桶中,每个桶再分别排序(通常使用其他排序算法),然后依次合并各个桶中的数据。
也就是说,通过映射函数将待排序数据分组,对每个组选择合适的排序算法排序后,遍历每个桶,依次赋值回原数组。
时间复杂度:O(n + k)(k 是桶的数量,且每个桶中的数据均匀分布)
空间复杂度:O(n + k)
三、 稳定性
排序前如果a等于b,a在b的前面,排序后a仍在b的前面,则称该排序算法稳定。
稳定排序:冒泡排序、插入排序、归并排序、计数排序、桶排序、基数排序。
不稳定排序:快速排序、堆排序、选择排序、希尔排序。
速记:不稳定的排序有“快选堆希(吸)”。想象眼前是一堆堆的饮料,快选一堆来吸。
四、时空复杂度
十大排序的时空复杂度列表如下:
n表示待排序数据规模,k表示待排序数据范围,对数以2为底。
相关文章:
十大排序简介
十大排序简介 一、排序分类二、排序思路1.冒泡排序(Bubble Sort)2.选择排序(Selection Sort)3.插入排序(Insertion Sort)4.希尔排序(Shell Sort&a…...
uniapp小程序中隐藏顶部导航栏和指定某页面去掉顶部导航栏小程序
uniappvue3开发小程序过程中隐藏顶部导航栏和指定某页面去掉顶部导航栏方法 在page.json中 "globalStyle": {"navigationStyle":"custom",}, 如果是指定某个页面关闭顶部导航栏,在style中添加"navigationStyle": "cus…...
echarts:dataZoom属性横向滚动条拖拽不生效
问: 拖拽的过程中,第一次向右拖拽正常,然后就报错: echarts报错: var pointerOption pointerShapeBuilder[axisPointerType](axis,pixeValue,otherExtent),(axis,pixeValue,otherExtent)下划线红色报错:…...
【Leetcode 热题 100】739. 每日温度
问题背景 给定一个整数数组 t e m p e r a t u r e s temperatures temperatures,表示每天的温度,返回一个数组 a n s w e r answer answer,其中 a n s w e r [ i ] answer[i] answer[i] 是指对于第 i i i 天,下一个更高温度…...
R数据分析:多分类问题预测模型的ROC做法及解释
有同学做了个多分类的预测模型,结局有三个类别,做的模型包括多分类逻辑回归、随机森林和决策树,多分类逻辑回归是用ROC曲线并报告AUC作为模型评估的,后面两种模型报告了混淆矩阵,审稿人就提出要统一模型评估指标。那么肯定是统一成ROC了,刚好借这个机会给大家讲讲ROC在多…...
如何用 SSH 访问 QNX 虚拟机
QNX 虚拟机默认是开启 SSH 服务的,如果要用 SSH 访问 QNX 虚拟机,就需要知道虚拟机的 IP 地址,用户和密码。本文我们来看看如何获取这些参数。 1. 启动虚拟机 启动过程很慢,请耐心等待。 2. 查看 IP 地址 等待 IDE 连接到虚拟机。…...
交响曲-24-3-单细胞CNV分析及聚类
CNV概述 小于1kb是常见的插入、移位、缺失等的变异 人体内包含<10% 的正常CNV,我们的染色体数是两倍体,正常情况下,只有一条染色体表达,另一条沉默,当表达的那条染色体发生CNV之后,表达数量就会成倍增加…...
java远程调试debug
文章目录 首先被调试的服务配置idea 中配置远程调试连接上被调试服务打断点开始调试 首先被调试的服务配置 被调试的 java 服务需要开启允许被远程调试的配置,具体就是启动脚本中,加上允许被远程调试以及相应端口 # 针对JDK15.-1.8 -agentlib:jdwptran…...
操作系统之系统调用
系统调用 从上文简介得知,操作系统是计算机硬件和软件之间的桥梁,通过管理计算机软件和硬件资源,最终为我们用户提供服务。就如同一个管家帮助我们对CPU(进程)的管理、内存的管理、设备的管理、文件的管理。而我们如何…...
【docker】exec /entrypoint.sh: no such file or directory
dockerfile生成的image 报错内容: exec /entrypoint.sh: no such file or directory查看文件正常在此路径,但是就是报错没找到。 可能是因为sh文件的换行符使用了win的。...
CAPL概述与环境搭建
CAPL概述与环境搭建 目录 CAPL概述与环境搭建1. CAPL简介与应用领域1.1 CAPL简介1.2 CAPL的应用领域 2. CANoe/CANalyzer 安装与配置2.1 CANoe/CANalyzer 简介2.2 安装CANoe/CANalyzer2.2.1 系统要求2.2.2 安装步骤 2.3 配置CANoe/CANalyzer2.3.1 配置CAN通道2.3.2 配置CAPL节点…...
ML-Agents:智能体(三)
注:本文章为官方文档翻译,如有侵权行为请联系作者删除 Agent - Unity ML-Agents Toolkit–原文链接> ML-Agents:智能体(一) ML-Agents:智能体(二) ML-Agents:智能体&a…...
【harbor】离线安装2.9.0-arm64架构服务制作和升级部署
执行: .prepare 【作用就是产生一些配置信息 和docker-compose.yaml文件,然后docker-compose发布docker】 harbor官网地址:Harbor 参考文档可以看这里:部署 harbor 2.10.1 arm64 - 简书。 前提环境准备: 安装docker 和 docker…...
可视化-Visualization
可视化-Visualization 1.Introduction Visualization in Open CASCADE Technology is based on the separation of: on the one hand – the data which stores the geometry and topology of the entities you want to display and select, andon the other hand – its pr…...
完整化安装kubesphere,ks-jenkins的状态一直为init
错误描述: 打印日志: kubectl describe pod ks-jenkins-7fcff7857b-gh4g5 -n kubesphere-devops-system 日志描述如下: Events: Type Reason Age From Message ---- ------ ---- …...
halcon三维点云数据处理(十)locate_cylinder_3d
目录 一、locate_cylinder_3d例程代码二、gen_binocular_rectification_map函数三、binocular_disparity函数四、自定义函数select_best_candidates五、自定义函数remove_shadowed_regions 一、locate_cylinder_3d例程代码 1、读取或者创建3D形状模型, 2、根据双目…...
【CSS】设置滚动条样式
文章目录 基本语法用法案例 基本语法 在CSS中,可以使用 ::-webkit-scrollbar 和相关伪元素来为滚动条设置样式,但请注意这些伪元素是非标准的,主要用于WebKit内核浏览器(如Chrome、Safari)。 ::-webkit-scrollbar CSS …...
一个运行在浏览器中的开源Web操作系统Puter本地部署与远程访问
文章目录 前言1.关于Puter2.本地部署Puter3.Puter简单使用4. 安装内网穿透5.配置puter公网地址6. 配置固定公网地址 💡 推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击跳转到网站…...
支持selenium的chrome driver更新到131.0.6778.264
最近chrome释放新版本:131.0.6778.264 如果运行selenium自动化测试出现以下问题,是需要升级chromedriver才可以解决的。 selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only s…...
conda+jupyter+pycharm:如何在Windows conda环境下运行jupyter并使用浏览器或者pycharm运行.ipynb
1 安装conda 2 conda环境下安装jupyter pip install jupyter3 设置jupyter配置文件 1)创建 jupyter_notebook_config.py文件 jupyter notebook --generate-config 2)设置密码 3)设置参数 直接将以下参数修改为自己的配置后复制到配置文件…...
生成式数据增强在大语言模型中的应用与实践
引言 近年来,大语言模型(Large Language Models, LLMs)如GPT、BERT等在自然语言处理(NLP)领域取得了巨大突破。然而,这些模型的性能往往依赖于大量高质量的训练数据,而在许多实际应用场景中&am…...
深度学习笔记11-优化器对比实验(Tensorflow)
🍨 本文为🔗365天深度学习训练营中的学习记录博客🍖 原作者:K同学啊 目录 一、导入数据并检查 二、配置数据集 三、数据可视化 四、构建模型 五、训练模型 六、模型对比评估 七、总结 一、导入数据并检查 import pathlib,…...
汽车免拆诊断 | 2007款保时捷Carrera S车行驶中发动机冷却液温度报警灯异常点亮
故障现象 一辆2007款保时捷Carrera S车,搭载3.8 L自然吸气发动机,累计行驶里程约为7.8万km。车主反映,车辆行驶一段距离后,组合仪表上的发动机冷却液温度报警灯异常点亮。为此,在其他维修厂已更换过节温器、发动机冷却…...
【蓝牙】win11 笔记本电脑连接 hc-06
文章目录 前言步骤 前言 使用电脑通过蓝牙添加串口 步骤 设置 -> 蓝牙和其他设备 点击 显示更多设备 更多蓝牙设置 COM 端口 -> 添加 有可能出现卡顿,等待一会 传出 -> 浏览 点击添加 hc-06,如果没有则点击 再次搜索 确定 添加成…...
what?ngify 比 axios 更好用,更强大?
文章目录 前言一、什么是ngify?二、npm安装三、发起请求3.1 获取 JSON 数据3.2 获取其他类型的数据3.3 改变服务器状态3.4 设置 URL 参数3.5 设置请求标头3.6 与服务器响应事件交互3.7 接收原始进度事件3.8 处理请求失败3.9 Http Observables 四、更换 HTTP 请求实现…...
EFCore HasDefaultValueSql (续2 HasComputedColumnSql)
前情:EFCore HasDefaultValueSql EFCore HasDefaultValueSql (续1 ValueGeneratedOnAdd)-CSDN博客 小伙伴在使用 HasDefaultValueSql 时,对相关的 ValueGeneratedOnAdd, HasComputedColumnSql 也有了疑问: HasComputedColumnSql 对于计算…...
springboot整合h2
在 Spring Boot 中整合 H2 数据库非常简单。H2 是一个轻量级的嵌入式数据库,非常适合开发和测试环境。以下是整合 H2 数据库的步骤: 1. 添加依赖 首先,在你的 pom.xml 文件中添加 H2 数据库的依赖: <dependency><grou…...
Unity自带的真车模拟系统,速度不够大r时如何以匀速上桥
在 Unity 中,如果你使用自带的真车模拟系统(如 Wheel Collider)时,发现车辆上桥时速度不够,导致无法顺利上坡,可以通过以下方法调整车辆的行为,使其能够以匀速上桥: 1. 调整 Wheel C…...
HarmonyOS鸿蒙-@State@Prop装饰器限制条件
一、组件Components级别的状态管理: State组件内状态限制条件 1.State装饰的变量必须初始化,否则编译期会报错。 // 错误写法,编译报错 State count: number;// 正确写法 State count: number 10; 2.嵌套属性的赋值观察不到。 // 嵌套的…...
C# 中的 Task 和 Async/Await
理解 C# 中的 Task 和 Async/Await:提升程序性能的利器 前言:在现代应用程序开发中,特别是在设计用户界面(UI)和进行网络请求等 I/O 操作时,异步编程变得尤为重要。C# 提供了一套强大的异步编程模型&#…...
vue.js 基于VueCli自定义创建项目
在使用Vue.js进行项目开发时,我们可以使用Vue CLI来快速创建项目。Vue CLI是一个基于Vue.js的命令行工具,它提供了一套完整的项目脚手架,可以帮助开发者快速搭建Vue.js项目的开发环境。 下面我们来详细解析如何使用Vue CLI自定义创建项目&am…...
Java中的反射机制及其应用场景
目录 什么是Java反射机制? 工作原理 主要应用场景 注意事项 总结 什么是Java反射机制? Java反射机制是一种强大的工具,它允许程序在运行时访问、检查和修改其本身的类和对象的信息。通过反射,开发者可以在不知道类的具体实现…...
金融项目实战 03|JMeter脚本实现手工接口测试
目录 一、环境说明 1、项目环境搭建 2、Mock说明 二、构造测试数据 1、通过系统页面构造 2、通过接口构造 3、通过数据库构造【推荐】 4、案例:构造借款业务数据 三、JMeter执行接口测试用例 1、获取图片验证码、获取短信验证码 2、注册脚本 3、登录脚本…...
前端工具汇总
1. vscode 下载地址:https://code.visualstudio.com/ vscode扩展汇总: 1.1 Code Spell Checker(必须安装) 代码拼写检查器 1.2 Auto Close Tag 自动添加HTML/XML的关闭标签 3. Auto Import 自动查找、解析并为所有可用导入…...
【学习路线】Python数据分析(数据科学) 详细知识点学习路径(附学习资源)
学习本路线内容之前,请先学习Python的基础知识 其他路线: Python基础 >> Python进阶 >> Python爬虫 >> Python数据分析(数据科学) >> Python 算法(人工智能) >> Pyth…...
Flutter 实现验证码输入框学习
学习flutter代码 实现一个用于输入验证码的自定义组件,它允许用户输入固定长度的验证码,并在输入完成时触发回调。 前置知识点学习 TextStyle TextStyle 是 Flutter 中用于定义文本样式的类。它提供了一组属性来控制文本的外观,如字体大小、…...
hutool糊涂工具通过注解设置excel宽度
import java.lang.annotation.*;Documented Retention(RetentionPolicy.RUNTIME) Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER}) public interface ExcelStyle {int width() default 0; }/*** 聊天记录*/ Data public class DialogContentInfo {/**…...
汽车基础软件AutoSAR自学攻略(四)-AutoSAR CP分层架构(3) (万字长文-配21张彩图)
汽车基础软件AutoSAR自学攻略(四)-AutoSAR CP分层架构(3) (万字长文-配21张彩图) 前面的两篇博文简述了AutoSAR CP分层架构的概念,下面我们来具体到每一层的具体内容进行讲解,每一层的每一个功能块力求用一个总览图,外加一个例子的图给大家进…...
有收到腾讯委托律师事务所向AppStore投诉带有【水印相机】主标题名称App的开发者吗
近期,有多名开发者反馈,收到来自腾讯科技 (深圳) 有限公司委托北京的一家**诚律师事务所卞,写给AppStore的投诉邮件。 邮件内容主要说的是,腾讯注册了【水印相机】这四个字的商标,所以你们这些在AppStore上的app&…...
SpringBoot操作spark处理hdfs文件
SpringBoot操作spark处理hdfs文件 1、导入依赖 <!-- spark依赖--><dependency><groupId>org.apache.spark</groupId><artifactId>spark-core_2.12</artifactId><version>3.2.2</version></dependency><depend…...
Spring Boot中的依赖注入是如何工作
Spring Boot 中的依赖注入(Dependency Injection,简称 DI)是通过 Spring 框架的核心机制——控制反转(Inversion of Control,IOC)容器来实现的。Spring Boot 基于 Spring Framework,在应用中自动…...
算法面试1
简述yolov1的网络架构 YOLOv1网络结构包括24层卷积层用来提取图像的特征,2层全连接层回归得到7730(141420)的张量。 网络结构大概如下:输入的是4484483通道的图像,就是RGB图像,然后用64个卷积核大小是…...
Android车机DIY开发之软件篇(八)单独编译
Android车机DIY开发之软件篇(八)单独编译 1.CarLauncher单独编译 CarLauncher源码位于 packages/apps/Car/Launcher 用Eclipse ADT 谷歌定制版编译而成,.mk .bp编译 Android13目录如下: alientekalientek:~/packages/apps/Car$ ls Calendar …...
保证Mysql数据库到ES的数据一致性的解决方案
文章目录 1.业务场景介绍1.1 需求分析1.2 技术实现方案 2.业界常用数据一致性方案分析2.1 同步双写方案2.2 MQ异步双写方案2.3 扫表定期同步方案2.4 监听binlog同步方案 1.业务场景介绍 1.1 需求分析 某知名的在线旅游平台,在即将到来的春季促销活动之前ÿ…...
Cursor实现go项目配置并实现仓库Gin项目运行
✅作者简介:大家好,我是 Meteors., 向往着更加简洁高效的代码写法与编程方式,持续分享Java技术内容。 🍎个人主页:Meteors.的博客 💞当前专栏:知识备份 ✨特色专栏:知识分享 &#x…...
【网络云SRE运维开发】2025第2周-每日【2025/01/11】小测-【第11章NAT理论和实操考试】解析
文章目录 一、选择题二、理论题三、实操题 【网络云SRE运维开发】2025第2周-每日【2025/01/11】小测-【第11章NAT理论和实操考试】解析 一、选择题 在H3C设备上,NAT技术主要用于( ) A. 提高网络安全性 B. 实现不同网段的通信 C. 将内部私有IP…...
drawDB docker部属
docker pull xinsodev/drawdb docker run --name some-drawdb -p 3000:80 -d xinsodev/drawdb浏览器访问:http://192.168.31.135:3000/...
页面顶部导航栏(Navbar)的功能(Navbar/index.vue)
这段代码是一个 Vue.js 组件,实现了页面顶部导航栏(Navbar)的功能。我将分块分析它的各个部分: 模板 (Template): <!-- spid-admin/src/layout/components/Navbar/index.vue --> <template><div class"navb…...
【人工智能】用Python进行对象检测:从OpenCV到YOLO的全面指南
对象检测是计算机视觉领域的核心任务之一,广泛应用于视频监控、自动驾驶、智能安防等多个场景。随着深度学习技术的发展,基于传统方法的对象检测逐渐被基于神经网络的先进模型所取代。本文将系统地介绍如何使用Python进行对象检测,重点探讨了…...
深度学习从入门到实战——卷积神经网络原理解析及其应用
卷积神经网络CNN 卷积神经网络前言卷积神经网络卷积的填充方式卷积原理展示卷积计算量公式卷积核输出的大小计算感受野池化自适应均值化空洞卷积经典卷积神经网络参考 卷积神经网络 前言 为什么要使用卷积神经网络呢? 首先传统的MLP的有什么问题呢? - …...