排序算法的稳定性

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

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

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

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

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

  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. 卧槽,面试官质疑我不会配置中心原理,看不起谁呢?
  2. Poj 2186 Popular Cows(Tarjan 强连通缩点)
  3. 变焦即可判断物体的距离
  4. JS的DOM和BOM
  5. 在 ASP.NET MVC 3 中应用 KindEditor
  6. oracle_数据库对象
  7. 测试python第二周_python第二周作业
  8. linux iphone 同步时间,与iPad/iPhone同步
  9. java imageicon 路径_java awt ImageIcon icon 相对路径设置
  10. 序列化和反序列化(四)——序列化存储规则
  11. c++ primer plus 之c++数据类型
  12. matlab调用cuda,Matlab 调用CUDA的总结(Windows、Ubuntu)
  13. c语言答案doc,c语言考试试题及答案
  14. 文献阅读【RNA-seq数据归一化】
  15. validity属性
  16. Csdn视频第二十期 : 测试工具与流程讨论
  17. Excel如何设置下拉选项
  18. 读书印记 - 《心流:最优体验心理学》
  19. 3款好用的知识库软件,帮你解决私有化部署,老板抓紧收藏
  20. 无畏先锋服务器未响应,LOL无畏先锋维护到几点 LOL数个大区为什么维护

热门文章

  1. 超级计算机1月冷空气,一个冬天没下雪的北京终于要下雪了?超级计算机:还不能完全确定...
  2. QQ互联登录提示redirect uri is illegal(100010)完美解决方法亲测有用!
  3. C/C++程序的断点调试 - Visual Studio Code
  4. 留存率到底有几种计算方式?
  5. Go语言安装并配置环境变量
  6. 如何做好一名售前工程师 [理论]
  7. 用python的turtle画同心圆_在Python中用turtle函数画同心圆
  8. C++的四种类型转换
  9. 双十一1682亿背后的真相曝光
  10. 什么是OpenWRT?