排序算法的稳定性

对于一般的算法,我们一般只需要分析它的时间复杂度和空间复杂度,但是对于排序算法来说,我们还有一个非常重要的分析指标,那就是排序算法的稳定性。稳定性是指,在需要进行排序操作的数据中,如果存在值相等的元素,在排序前后,相等元素之间的排列顺序不发生改变。

大家可能会想,反正都是相等的元素,通过排序后谁在前谁在后有什么不一样呢?对排序算法进行稳定性分析又有什么实际意义呢?其实,在学习数据结构与算法的过程中,我们解决的问题基本上都是对简单的数字进行排序。这时,我们考虑其是否稳定似乎并没有什么意义。但是在实际应用中,我们面对的数据对象往往都是复杂的,每个对象可能具有多个数字属性且每个数字属性的排序都是有意义的。所以在排序时,我们需要关注每个数字属性的排序是否会对其他属性进行干扰

举个例子,假如我们要给大学中的学生进行一个排序。每个学生都有两个数字属性,一个是学生所在年级,另一个是学生的年龄,最终我们希望按照学生年龄大小进行排序。而对于年龄相同的同学,我们希望按照年级从低到高的顺序排序。那么要满足这样的需求,我们应该怎么做呢?

如果我们利用具有稳定性的排序算法,这个问题就会更好地解决了。我们先按照年级对学生进行排序,然后利用稳定的排序算法,按年龄进行排序。这样,只需要运用两次排序,我们就完成了我们的目的。这是因为,稳定的排序算法能够保证在排序过程中,相同年龄的同学,在排序之后,他们的顺序不发生改变。由于第一次我们已经将学生按年级排序好了,于是在第二次排序时,我们运用稳定的排序算法,相同年龄的学生依旧按年级保持顺序。

排序算法稳定性的意义相关推荐

  1. 各种排序算法稳定性比较

    前面有讲到了9种排序算法: 1.简单选择排序 2.堆排序        (1和2是属于选择排序) 3.直接插入排序 4.希尔排序     (3和4属于插入排序,有时把改进后的直接插入排序叫做二分插入) ...

  2. 常用排序算法稳定性、时间复杂度分析

    1. 选择排序.快速排序.希尔排序.堆排序不是稳定的排序算法,      冒泡排序.插入排序.归并排序和基数排序是稳定的排序算法. 2.研究排序算法的稳定性有何意义? 首先,排序算法的稳定性大家应该都 ...

  3. 8种常用排序算法稳定性分析

    选择排序.快速排序.希尔排序.堆排序不是稳定的排序算法 冒泡排序.插入排序.归并排序和基数排序都是稳定的排序算法. [1]为什么要区分排序算法的稳定性? 排序算法的稳定性通俗地讲就是能保证排序前两个相 ...

  4. 常用排序算法稳定性分析

    [1]选择排序.快速排序.希尔排序.堆排序不是稳定的排序算法 冒泡排序.插入排序.归并排序和基数排序都是稳定的排序算法. [2]研究排序算法的稳定性有何意义? 首先,排序算法的稳定性大家应该都知道,通 ...

  5. 数据结构的各种排序算法稳定性比较

    一.前面有讲到了9种排序算法: 1.简单选择排序 2.堆排序 (1和2是属于选择排序) 3.直接插入排序 4.希尔排序 (3和4属于插入排序,有时把改进后的直接插入排序叫做二分插入) 5.冒泡排序 6 ...

  6. 常用的8种排序算法稳定性分析

    [1]选择排序.快速排序.希尔排序.堆排序不是稳定的排序算法 冒泡排序.插入排序.归并排序和基数排序都是稳定的排序算法. [2]研究排序算法的稳定性有何意义? 首先,排序算法的稳定性大家应该都知道,通 ...

  7. 各种排序算法稳定性的总结!!!

    这几天笔试了好几次了,连续碰到一个关于常见排序算法稳定性判别的问题 ,往 往还是多选,对于我以及和我一样拿不准的同学可不是一个能轻易下结论的题目,当 然如 果你笔试之前已经记住了数据结构书上哪些是稳定 ...

  8. 排序算法稳定性和不稳定性的理解

    稳定性初解 说到稳定性,与之对应就是不稳定性,那么排序算法的稳定性又为何意呢?通俗地讲就是,能保证排序前两个相等的数其在序列的前后位置顺序与排序后它们的前后位置顺序一致.形式化解释如下:一列数中,如果 ...

  9. 排序算法稳定性的好处

    排序算法稳定性概念: 在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中 r[i] = r[j],且r[i]在r[j]之前,而在排序后的序列中, ...

最新文章

  1. 2022-2028年中国B2C电子商务市场投资分析及前景预测报告
  2. 组合数的简单求法(dfs)
  3. 安装XAMPP, MYSQL 启动后自动停止
  4. java中正则表达式函数_java正则表达式PHP中的正则表达式函数介绍
  5. 实用场景解析:那些漂亮的可视化图表都是如何做的?
  6. java中date类型如何赋值_一文读懂java中的Reference和引用类型
  7. Windows下Nutch的配置
  8. WINCE6补丁安装
  9. 深入理解 Node.js 中 EventEmitter源码分析(3.0.0版本)
  10. 2015-ResNet讲解
  11. 大牛精心挑选的25个Visual Basic学习资料汇总
  12. win7开机动画自定义
  13. Office 2019 正式版 下載
  14. python开三次方_python 三次方
  15. 透视HTTP协议-进阶篇-极客时间-学习笔记
  16. requests+xpath之贴吧图片爬取
  17. MPS | 聊聊功率因数校正那些事儿
  18. 【问题】连接mysql报错errorCode 0, state 08S01
  19. pair类型 C++
  20. php导出excel 细边框,phpexcel设置边框不全或者只有竖线问题解决 方法

热门文章

  1. 2021年项城一高理科高考成绩查询,项城一高举行2021年高考壮行大会
  2. C++、Python、Java的MySQL数据库操作
  3. 微信小程序报错:expect end-tag `input`., near `div`
  4. css设置打印样式@page
  5. 小米手机 fastboot 方式刷入 TWRP recovery 教程,以红米4X(santoni)为例
  6. 抓取Mapbar地图切片的一个算法
  7. java生成呈现正态分布的数_生成0和1范围内的正态分布数据
  8. 分享:2013中国开发者大会(移动和游戏)--广州站
  9. Unity学习笔记-切水果小游戏第一发
  10. 八戒技术:徒手撸一套简易字符识别方案