【数据结构】十大经典排序算法总结与分析

news2024/9/20 3:23:18

在这里插入图片描述

文章目录

  • 前言
  • 1. 十大经典排序算法分类
  • 2. 相关概念
  • 3. 十大经典算法总结
  • 4. 补充内容
    • 4.1 比较排序和非比较排序的区别
    • 4.2 稳定的算法就真的稳定了吗?
    • 4.3 稳定的意义
    • 4.4 时间复杂度的补充
    • 4.5 空间复杂度补充
  • 结语

前言

排序算法是《数据结构与算法》中最基本的算法之一。

排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。

在这里插入图片描述

前面通过11篇内容的学习,我们已经深刻的了解了十大经典排序算法,本文将对这十大经典算法进行总结,比较与分析。

1. 十大经典排序算法分类

十种常见排序算法可以分为两大类

非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破 O ( n l o g n ) O(nlogn) O(nlogn),因此称为非线性时间比较类排序。

线性时间非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此称为线性时间非比较类排序。

在这里插入图片描述

2. 相关概念

  • 稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面;
  • 不稳定:如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面;
  • 内排序:所有排序操作都在内存中完成;
  • 外排序:由于数据太大,因此把数据放在磁盘中,而排序通过磁盘和内存的数据传输才能进行;
  • **时间复杂度:**时间复杂度就是时间复杂度的计算并不是计算程序具体运行的时间,而是算法执行语句的次数。
  • 空间复杂度:空间复杂度(Space Complexity)是对一个算法在运行过程中临时占用存储空间大小的量度

3. 十大经典算法总结

在这里插入图片描述

在这里插入图片描述

名词解释

  • n: 数据规模
  • k: “桶”的个数
  • In-place: 占用常数内存,不占用额外内存
  • Out-place: 占用额外内存

4. 补充内容

4.1 比较排序和非比较排序的区别

  • 常见的快速排序、归并排序、堆排序、冒泡排序等属于比较排序在排序的最终结果里,元素之间的次序依赖于它们之间的比较。每个数都必须和其他数进行比较,才能确定自己的位置。
    冒泡排序之类的排序中,问题规模为n,又因为需要比较n次,所以平均时间复杂度为 O ( n 2 ) O(n^2) O(n2)。在归并排序、快速排序之类的排序中,问题规模通过分治法消减为 l o g n logn logn,所以时间复杂度平均 O ( n l o g n ) O(nlogn) O(nlogn)

    比较排序的优势是,适用于各种规模的数据,也不在乎数据的分布,都能进行排序。可以说,比较排序适用于一切需要排序的情况。

  • 计数排序、基数排序、桶排序则属于非比较排序。非比较排序是通过确定每个元素之前,应该有多少个元素来排序。针对数组arr,计算arr[i]之前有多少个元素,则唯一确定了arr[i]在排序后数组中的位置。
    非比较排序只要确定每个元素之前的已有的元素个数即可,所有一次遍历即可解决。算法时间复杂度 O ( n ) O(n) O(n)

    非比较排序时间复杂度底,但由于非比较排序需要占用空间来确定唯一位置。所以对数据规模和数据分布有一定的要求。

4.2 稳定的算法就真的稳定了吗?

算法思想的本身是独立于编程语言的,所以你写代码去实现算法的时候很多细节可以做不同的处理。采用不稳定算法不管你具体实现时怎么写代码,最终相同元素位置总是不确定的(可能没变也可能变了)。

而稳定排序算法是你在具体实现时如果细节方面处理的好就会是稳定的,但有些细节没处理得到的结果仍然是不稳定的。

4.3 稳定的意义

如果我们只是面对简单的数字排序,那么稳定性确实也没有多大意义。比如1 2 3 3 4的序列中如果第一个3和第二个3在sort方法反复执行之后位置也反复变化,但是对于调用sort方法所想要获得排序结果的上游应用而言,那么结果还是1 2 3 3 4,至于3的次序,无关紧要。

如果排序的内容仅仅是一个复杂对象的某一个数字属性,那么稳定性依旧将毫无意义(所谓的交换操作的开销已经算在算法的开销内了,如果嫌弃这种开销,不如换算法好了?)

如果要排序的内容是一个复杂对象的多个数字属性,但是其原本的初始顺序毫无意义,那么稳定性依旧将毫无意义。

那么排序算法的「稳定性」在什么情况下才会变得有意义呢?

举个例子,一个班的学生已经按照学号大小排好序了,我现在要求按照年龄从小到大再排个序,如果年龄相同的,必须按照学号从小到大的顺序排列。那么问题来了,你选择的年龄排序方法如果是不稳定的,是不是排序完了后年龄相同的一组学生学号就乱了,你就得把这组年龄相同的学生再按照学号排一遍。如果是稳定的排序算法,我就只需要按照年龄排一遍就好了。

(从一个键上排序,然后再从另一个键上排序,第一个键排序的结果可以为第二个键排序所用。要排序的内容是一个复杂对象的多个数字属性,且其原本的初始顺序存在意义,那么我们需要在二次排序的基础上保持原有排序的意义,才需要使用到稳定性的算法。)

排序算法的「稳定性」有何意义?这个还是要分应用场景来看,很多使用情况下,并没有什么实质的意义,而在有些情况下却有很重要的意义。

有很多算法你现在看着没啥,但是当放在大数据云计算的条件下它的稳定性非常重要。举个例子来说,对淘宝网的商品进行排序,按照销量,价格等条件进行排序,它的数据服务器中的数据非常多,因此,当时用一个稳定性效果不好的排序算法,如堆排序、shell排序,当遇到最坏情形,会使得排序的效果非常差,严重影响服务器的性能,影响到用户的体验。

4.4 时间复杂度的补充

一般讨论的时间复杂度均是最坏情况下的时间复杂度。这样做的原因是:最坏情况下的时间复杂度是算法在任何输入实例上运行时间的上界,这就保证了算法的运行时间不会比任何更长
平均时间复杂度是指所有可能的输入实例均以等概率出现的情况下,算法的期望运行时间。设每种情况的出现的概率为 p i pi pi,平均时间复杂度则为 s u m ( p i ∗ f ( n ) ) sum(pi*f(n)) sum(pif(n))

4.5 空间复杂度补充

利用程序的空间复杂度,可以对程序的运行所需要的内存多少有个预先估计。程序执行时所需存储空间包括以下两部分:
(1)固定部分:这部分空间的大小与输入/输出的数据的个数多少、数值无关。主要包括指令空间(即代码空间)、数据空间(常量、简单变量)等所占的空间。这部分属于静态空间。
(2)可变空间:这部分空间的主要包括动态分配的空间,以及递归栈所需的空间等。这部分的空间大小与算法有关。

空间复杂度所考虑的是可变空间这一部分

结语

今天的分享到这里就结束啦!如果觉得文章还不错的话,可以三连支持一下。

也可以点点关注,避免以后找不到我哦!

Crossoads主页还有很多有趣的文章,欢迎小伙伴们前去点评,您的支持就是作者前进的动力!

带你初步了解排序算法:https://blog.csdn.net/2301_80191662/article/details/142211265
十大经典排序算法总结与分析:https://blog.csdn.net/2301_80191662/article/details/142211564

在这里插入图片描述
参考内容:如果我问你:排序算法的「稳定性」有何意义?你怎么回答? (qq.com)

十大经典排序算法的复杂度分析_排序算法时间复杂度-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2131823.html

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

相关文章

计算机视觉(一)—— 特刊推荐

特刊征稿 01 期刊名称: Computer Vision for Smart Cities 截止时间: 提交截止日期:2024 年 12 月 31 日 目标及范围: 以下是一些潜在的主题: 城市交通和交通管理: • 车辆检测和跟踪以实现高效的交通流…

相机SD卡删除的照片可以恢复吗?6个方法,快速找回删除照片!

相机SD卡的照片在相机中误删了,有什么恢复办法吗?今天我要和大家分享一些关于如何恢复相机SD卡中删除的照片的方法。相信很多摄影爱好者都遇到过不小心删除了重要照片的情况,这时候我们该怎么办呢?别担心,下面我将为大…

野兔在线工具箱系统(市面上最强最多)最新版本更新2024.9

野兔在线工具箱系统,采用最新ThinkPHP8框架开发完成,也是基于YETUADMIN开发的工具箱系统,这次野兔在线工具系统更新,更新了几个新的功能模块,和已知的问题,修复系统部分功能。 程序开发 程序名称&#xf…

【生产力必备工具】GPU加速计算的首选云服务——蓝耘GPU(点击我的链接注册登录,可获50使用卷)

点击下面我的链接注册并登录,可获50使用卷:https://cloud.lanyun.net/#/registerPage?promoterCode11f606c51ehttps://cloud.lanyun.net/#/registerPage?promoterCode11f606c51e获得广泛丰富的NVIDIA高端GPU选择。高可配置高可用,专为大规模…

Linux之CentOS 7.9-Minimal部署Oracle 11g r2 安装实测验证(桌面模式)

前言: 发个之前的库存… Linux之CentOS 7.9-Minimal部署Oracle 11g r2 安装实测验证(桌面模式) 本次验证的是CentOS_7_Minimal-2009桌面模式来部署Oracle 11g r2,大家可根据自身环境及学习来了解。 环境:下载地址都给你们超链好了 1、Linux系统镜像包: 1.1 CentOS-7-x86_…

系统出现d3dcompiler_47.dll缺失怎么修复?总结6种d3dcompiler_47.dll修复方法

在现代电脑游戏中,​d3dcompiler_47.dll​ 文件是一个非常重要的组件,它用于DirectX应用程序的编译。然而,许多用户在尝试运行游戏或应用程序时,都会遇到“d3dcompiler_47.dll缺失”的错误。本文将为您提供解决此问题的详细步骤和…

2024年江西省职业院校技能大赛赛项规程 (简要概括)

这里写目录标题 一、赛项说明二、大赛时间三、参赛资格四、名额分配五、竞赛规程六、选拔方式七、报名办法八、奖项设置九、大赛QQ群十、资格审查 一、赛项说明 二、大赛时间 2024年十月至十二月 具体时间 地点 参考 赛项信息表 三、参赛资格 四、名额分配 五、竞赛规程 六、…

安全、稳定、高速的跨国文件传输系统

在全球化的大潮中,跨国企业的合作日益频繁,这使得跨国文件传输变得至关重要。企业在这一过程中追求的是快速、安全且稳定的文件传输服务。然而,跨国传输文件时,企业往往会遇到一些挑战。 要实现跨国文件传输的高效、安全与稳定&am…

DAPIER™(大片儿),一款专业的计算机艺术软件,一键式计算机艺术品快速智能(非AI)生成程序

DAPIER™是北京联高软件开发有限公司开发的计算机艺术软件,艺术的计算机生成类软件。 看看一些效果图吧。

OpenAI发布o1,首个具备‘推理’能力的模型

OpenAI 正在发布一个名为 o1 的新模型,这是计划中的一系列“推理”模型中的第一个,训练它们以回答比人类更复杂的问题,速度更快。同期发布的还有 o1-mini,一个更小、更便宜的版本。是的,如果你对AI界的传闻很熟悉&…

Stable Diffusion绘画 | 生成高清多细节图片的各个要素

在数字艺术领域,AI绘画技术已经逐渐成为艺术创作的新趋势。Stable Diffusion作为一款领先的AI绘画工具,以其生成高清多细节图片的能力备受关注。现在,让我们一起来探索Stable Diffusion生成高清多细节图片的各个要素,开启你的创意…

【生日视频制作】劳斯莱斯提车交车仪式感视频拍照AE模板修改文字软件一键生成器教程特效素材【AE模板】

生日视频制作教程劳斯莱斯提车交车仪式感视频拍照AE模板修改文字特效广告生成神器素材祝福玩法AE模板工程 怎么如何做的【生日视频制作】劳斯莱斯提车交车仪式感视频拍照AE模板修改文字软件一键生成器教程特效素材【AE模板】 生日视频制作步骤: 下载AE模板 安装AE…

从海量企业名录中脱颖而出,找到最匹配您的客户

从海量企业名录中脱颖而出,找到最匹配您的客户 在信息化高度发展的今天,如何从海量的企业名录中找到最符合您业务需求的客户,成为了每个企业营销人员的重要课题。虽然获取大量客户信息不再困难,但真正的挑战在于如何从这些数据中…

STM32常用数据采集滤波算法

例如,STM32进行滤波处理时,主要目的是处理数据采集过程中可能产生的噪声和尖刺信号。这些噪声可能来自电源干扰、传感器自身的不稳定性或其他外部因素。 1.一阶互补滤波 方法:取a0~1,本次滤波结果(1-a)本次采样值a上…

深度学习的零碎知识点

显卡内存 什么是显卡内存 简单来说就是,Windows 会在物理显存/「专用 GPU 内存」不够用或只有集成显卡的情况下,将物理内存 RAM 当作 GPU 的虚拟显存/「共享 GPU 内存」来使用。 什么是 Windows「共享 GPU 内存」,它与 VRAM 有什么不同 (s…

基于SSM数据分析的垃圾分类管理系统---附源码75778

摘要 随着城市化进程的加速,垃圾分类成为解决城市环境污染问题的重要举措。本文提出了一种基于SSM框架的垃圾分类管理系统,通过数据分析技术实现对垃圾分类过程的监测和管理。该系统结合了Spring、SpringMVC和MyBatis等框架,实现了垃圾分类数…

【GIS开发小课堂】写一个高德地图巡航功能的小DEMO

介绍 此项目使用vite为基础架构,内部实现均以typescript开发,可替换为自己的业务逻辑,并迁移到react,vue,umi等其他框架。 通过调用高德地图的API和threejs的开发,实现了一个小鸭子(可替换为自己…

如何使用UWA Gears连接模拟器进行性能测试

UWA Gears 是UWA最新发布的无SDK性能分析工具。针对移动平台,提供了实时监测和截帧分析功能,帮助您精准定位性能热点,提升应用的整体表现。 日常工作中,模拟器是测试岗位常用的一款工具,能够很好地解决例如公司内无法…

产业园区数字化转型升级怎么做?这个应对策略你或许可以参考下!

近年在政策红利、技术创新、需求升级等多重因素驱动下,中国产业园区数字化转型步伐加快,呈现出四个发展新趋势: 空间载体向虚实交互的数字空间拓展 服务模式向产业链级生态化服务升级 赋能工具向依托产业大脑“协同作战”演进 发展方式向注…

基于鸿蒙API10的RTSP播放器(五:拖动底部视频滑轨实现跳转)

拖动前播放位置: 拖动后播放位置: 在Slider组件中,添加onChange方法进行监听,当视频轨道拖放结束时,触发this.seekTo()函数,其中seekTo函数需要传递一个视频已播放时长作为参数 Slider({ value: this.p…