当前位置: 首页 > news >正文

【数据结构】排序算法系列——序言(附源码+图解)

作为基础算法的中流砥柱部分,排序算法一直都是计算机学习者们不可忽略的一部分。而其中的算法思想也蕴含着许多在今后的算法学习甚至是整个计算机技术的学习之中仍然熠熠生辉的算法思想,它们引领着我们不断探索算法的奥秘之处。所以,学习排序算法是十分重要的。 我将从十大内排序算法以及外排序的分类角度来进行详细解读,如有不解或者是疏漏还请多多见谅~一起讨论学习!

排序简介

在《算法导论》这本经典的算法学习中,我们可以看到“排序”二字的出现频率极高,更是直接拿出一整章节来对其中的快速排序、堆排序等进行讲解。

3b50a07e6f4646d6b2197e21c024c339.png

了解一种算法的重要程度,我们可以直接在这本书中所占的权重来粗略得知。

在维基百科中,对排序算法的解释是这样的。

2905d5323b8641648243a92b1b7b7159.png

排序算法(英语:Sorting algorithm)是一种将一组特定的数据按某种顺序进行排列的算法。简单来说,就是将一堆杂乱的数据处理成有序的数据。我们在进行排序的时候必须遵循两个原则:

  • 输出的结果一般是递增或者是递减序列,这里的递增递减既可以代表着“有序”二字;

  • 输出结果是原来输入的一种重新组合,不得删除或新增数据

在遵循这两个原则的基础上,诞生了众多不同的排序算法,它们或许在排序的过程中遵守着自己不同的规律,但是始终都遵守着以上两个原则。

排序算法同样也根据复杂度来区分其速度,同时也引入了一个新的判定概念——稳定性。

稳定性的概念

在排序过程中,我们会涉及到比较的概念,也就涉及到相对位置的概念,举例:

排序前,红5在蓝5的前面,蓝5在红5的后面;

53efcab3594a4ea996299c051478712b.png

在排序后,如果红5依旧蓝5前面,那么就是稳定的——我们可以理解为两者的相对位置只要不变,就是稳定的,如果变化了,实际上就会打乱原有的顺序,在内存存储和某些问题上会产生变动,从而就不稳定了

排序的稳定性不是决定这个算法是否好用的唯一标准,甚至可以说一个排序稳不稳定完全不影响它的速度和可用性。但是从一个对象的多个属性上来说,好的稳定性可以帮助在保持整体排序的同时能够实现不同属性的排序——由此可见稳定性的意义是从需求上出发的。各个排序算法的稳定性将在后续分别进行分析。

8844de37b3184615bcd950be2488e5ad.png

接下来的更新将对各个排序算法进行逐帧分析。欢迎大佬们关注我的排序系列文章!

相关文章:

  • Vue——Diff算法
  • 9.8通宵速通javascript
  • 图论(2)
  • 微信小程序uniappvue3版本-控制tabbar某一个的显示与隐藏
  • jmeter之ForEach控制器使用
  • Java | Leetcode Java题解之第386题字典序排数
  • 高压挑战:新能源汽车换电连接器的技术革新
  • 【机器人工具箱Robotics Toolbox开发笔记(十九)】机器人工具箱Link类函数参数说明
  • 时间同步服务
  • 基于yolov8的焊缝质量好坏系统python源码+onnx模型+评估指标曲线+精美GUI界面
  • JavaScript 知识点总结
  • [数据集][目标检测]鲜花检测数据集VOC+YOLO格式25215张106类别
  • 哪些无线通信系统没用OFDM系统
  • 怎么利用NodeJS发送视频短信
  • 百度飞浆OCR半自动标注软件OCRLabel配置【详细
  • [nginx文档翻译系列] 控制nginx
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • Apache的80端口被占用以及访问时报错403
  • Bytom交易说明(账户管理模式)
  • docker容器内的网络抓包
  • ES6之路之模块详解
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • interface和setter,getter
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • KMP算法及优化
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • Python十分钟制作属于你自己的个性logo
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • 排序算法之--选择排序
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 前端面试之闭包
  • 如何编写一个可升级的智能合约
  • 微服务核心架构梳理
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 最近的计划
  • MPAndroidChart 教程:Y轴 YAxis
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • ​卜东波研究员:高观点下的少儿计算思维
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • $.ajax中的eval及dataType
  • (3)STL算法之搜索
  • (Java数据结构)ArrayList
  • (第27天)Oracle 数据泵转换分区表
  • (附源码)springboot金融新闻信息服务系统 毕业设计651450
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (五)网络优化与超参数选择--九五小庞
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (转)shell中括号的特殊用法 linux if多条件判断
  • .bat批处理(五):遍历指定目录下资源文件并更新
  • .NET C#版本和.NET版本以及VS版本的对应关系
  • .NET Standard / dotnet-core / net472 —— .NET 究竟应该如何大小写?
  • .NET 的静态构造函数是否线程安全?答案是肯定的!
  • .NET 中什么样的类是可使用 await 异步等待的?