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

从零开始学数据结构系列之第六章《排序简介》

文章目录

  • 排序
    • 什么是排序
      • 排序的稳定性
        • 稳定性
        • 稳定性得好处
  • 往期回顾


排序

什么是排序

所谓排序,就是使一串数据,按照其中的某个或某些关键字的大小,递增或递减排列起来的操作。

​ 简单来说,就是一组混乱的数,将他从小到大排/或者从大到小排序

排序前:

在这里插入图片描述

排序后:
在这里插入图片描述

排序的稳定性

稳定性

排序前后两个相等的数相对位置不变,则算法稳定。

例如我下面这个例子(黑色字体指的是待排序的数据,褐色字体指的是下标

在这里插入图片描述
我们可以看到有两个4,下标不同

​ 我们可以理解为下标为3的这个4是第一次出现,下标为5的这个4是第二次出现的

那如果排序算法稳定的话(从小到大排序)
在这里插入图片描述

那如果排序算法不稳定的话(从小到大排序)

在这里插入图片描述
就是他们两个相对位置变了,所以排序不稳定

稳定性得好处

从一个键上排序,然后再从另一个键上排序,第一个键排序的结果可以为第二个键排序所用。

​ 意义:排序算法稳定性的意义在于,在对复杂的元素(拥有多个属性)的排序中,稳定的算法可以保留【原先相同元素之间的关系】。

举个例子

​ 一个班的学生已经按照学号大小排好序了,我现在要求按照年龄从小到大再排个序,如果年龄相同的,必须按照学号从小到大的顺序排列。
​ 那么问题来了,你选择的年龄排序方法如果是不稳定的,是不是排序完了后年龄相同的一组学生学号就乱了,你就得把这组年龄相同的学生再按照学号拍一遍。如果是稳定的排序算法,我就只需要按照年龄排一遍就好了。
这样看来稳定的排序算法是不是节省了时间。稳定性的优点就体会出来了

或者:

​ 比如一组商品原来按照价格从高到低排序,现在对其按销量从高到低排序。如果使用稳定的排序算法,可以保证在按销量排序后,相同销量的商品价格保持从高到低的排序。


☁️ 以上就是所有内容,对大家有用的话点个关注!感谢大家!

往期回顾

1.【第一章】《线性表与顺序表》
2.【第一章】《单链表》
3.【第一章】《单链表的介绍》
4.【第一章】《单链表的基本操作》
5.【第一章】《单链表循环》
6.【第一章】《双链表》
7.【第一章】《双链表循环》
8.【第二章】《栈》
9.【第二章】《队》
10.【第二章】《字符串暴力匹配》
11.【第二章】《字符串kmp匹配》
12.【第三章】《树的基础概念》
13.【第三章】《二叉树的存储结构》
14.【第三章】《二叉树链式结构及实现1》
15.【第三章】《二叉树链式结构及实现2》
16.【第三章】《二叉树链式结构及实现3》
17.【第三章】《二叉树链式结构及实现4》
18.【第三章】《二叉树链式结构及实现5》
19.【第三章】《中序线索二叉树理论部分》
20.【第三章】《中序线索二叉树代码初始化及创树》
21.【第三章】《中序线索二叉树线索化及总代码》
22【第三章】《先序线索二叉树理论及线索化》
23【第三章】《先序线索二叉树查找及总代码》
24【第三章】《后续线索二叉树线索化理论》
25【第三章】《后续线索二叉树总代码部分》
26【第三章】《二叉排序树基础了解》
27【第三章】《二叉排序树代码部分》
28【第三章】《二叉排序树代码部分》
29【第三章】《平衡二叉树基础概念》
30【第三章】《平衡二叉树的平衡因子》
31【第三章】《平衡二叉树的旋转基础详解》
32【第三章】《平衡二叉树的旋转类型图文详解》
33【第三章】《平衡二叉树的旋转类型总结及总代码》
34【第三章】《哈夫曼树简单了解》
35【第三章】《哈夫曼树的构造方法》
36【第三章】《哈夫曼编码构造及代码》
37【第四章】《图的定义》
38【第四章】《图的基本概念和术语》
39【第四章】《图的存储结构》
40【第四章】《图的遍历之深度优先遍历》
41【第四章】《广度优先遍历BFS》
42【第四章】《图的遍历总代码》
43【第四章】《最小生成树概念》
44【第四章】《最小生成树的应用举例》
45【第四章】《prim算法(普里姆算法)详解》
46【第四章】《prim算法(普里姆算法)详解2》
47【第四章】《prim算法(普里姆算法)详解3》
48【第四章】《prim算法(普里姆算法)讲解汇总》
49【第四章】《prim算法(普里姆算法)代码讲解》
50【第四章】《prim算法(普里姆算法)总代码》
51【第四章】《克鲁斯卡尔算法思路介绍》
52【第四章】《克鲁斯卡尔算法步骤思路1》
53【第四章】《克鲁斯卡尔算法步骤思路2》
54【第四章】《克鲁斯卡尔算法应用场景-公交站问题》
55【第四章】《克鲁斯卡尔算法判断回路问题》
56【第四章】《克鲁斯卡尔算法步骤回顾》
57【第四章】《克鲁斯卡尔算法代码初始化详解》
58【第四章】《克鲁斯卡尔算法总代码详解》
59【第四章】《了解最短路径》
60【第四章】《迪杰斯特拉算法了解》
61【第四章】《Dijkstra 迪杰斯特拉算法图解》
62【第四章】《Dijkstra 迪杰斯特拉算法总代码》
63【第四章】《弗洛伊德(floyd)算法简介》
64【第四章】《弗洛伊德算法详解》
65【第四章】《弗洛伊德代码详解》
66【第四章】《拓扑排序之AOV网》
67【第四章】《拓扑排序介绍及其方法》
68【第四章】《拓扑排序代码详解》
69【第四章】《什么是关键路径》
70【第四章】《什么是关键路径二》
71【第四章】《关键活动与最早路径实现思想》
72【第四章】《关键活动与最早路径实现思想写法二》
73【第四章】《关键路径总代码讲解写法一》
74【第四章】《关键路径总代码讲解写法二》
75【第五章】《顺序查找》
76【第五章】《顺序查找-带哨兵》
77【第五章】《二分查找》
78【第五章】《B树了解以及定义》
79【第五章】《B树的插入例子1》
80【第五章】《B树的插入例子2》
81【第五章】《B树的删除》
82【第五章】《B树的删除2》
83【第五章】《B树的代码部分》
84【第五章】《B树的总体代码》

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 三维坐标变换
  • linux c++ 通信架构 笔记(14) 第三章 Nginx 开发初步:守护进程的信号使用,介绍 nginx 的选项与信号,后台进程与守护进程的区别
  • websocket 和sip 在协议层面有哪些区别,为什么要各自这样设置协议
  • redis的事务与管道有什么不同?
  • Vscode中搭建ABAP开发环境
  • 开源的 Kafka 管理平台
  • C++字符串的常用操作
  • cesium.js 入门到精通(6)
  • vue3.x项目使用高德地图JS API 2.0
  • 如何使用 Vidu Studio 根据照片和提示词生成视频
  • 深入剖析 MQTT 协议:物联网通信的核心力量
  • 【服务器第一期】Xshell、Xftp下载及连接
  • 无人机巡检:突破传统局限,引领智能监测新时代
  • Js中call、apply和bind的区别
  • LibSVM介绍及使用
  • AHK 中 = 和 == 等比较运算符的用法
  • C++类中的特殊成员函数
  • css布局,左右固定中间自适应实现
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • Mocha测试初探
  • Node 版本管理
  • Vue ES6 Jade Scss Webpack Gulp
  • 初识MongoDB分片
  • 大整数乘法-表格法
  • 浮动相关
  • 给github项目添加CI badge
  • 学习ES6 变量的解构赋值
  • 异常机制详解
  • 因为阿里,他们成了“杭漂”
  • 智能网联汽车信息安全
  • Java性能优化之JVM GC(垃圾回收机制)
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • ​MySQL主从复制一致性检测
  • ​比特币大跌的 2 个原因
  • ###项目技术发展史
  • #java学习笔记(面向对象)----(未完结)
  • #图像处理
  • (k8s)Kubernetes 从0到1容器编排之旅
  • (windows2012共享文件夹和防火墙设置
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)...
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (源码版)2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码季节性时序预测SARIMA天气预测建模
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • (转载)利用webkit抓取动态网页和链接
  • (自用)仿写程序
  • ****** 二十三 ******、软设笔记【数据库】-数据操作-常用关系操作、关系运算
  • *2 echo、printf、mkdir命令的应用
  • .gitignore文件_Git:.gitignore
  • .NET Micro Framework 4.2 beta 源码探析
  • .NET Remoting Basic(10)-创建不同宿主的客户端与服务器端
  • .NET 中各种混淆(Obfuscation)的含义、原理、实际效果和不同级别的差异(使用 SmartAssembly)
  • .net 逐行读取大文本文件_如何使用 Java 灵活读取 Excel 内容 ?