排序算法稳定性概念

在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中

r[i] = r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。

 选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法,

而冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。

选择排序不稳定的例子:5 8 5 2 9  第一次交换之后 2 8 5 5 9

快速排序不稳定的例子:5 3 3 4 3 8 9 10 11  如果选择第一个数作为基准 , 第一次交换就是3 3 3 4 5 8 9 10 11

希尔排序不稳定的例子:{ 3, 5, 10, 8, 7, 2, 8, 1, 20, 6 },h=2时分成两个子序列 { 3, 10, 7, 8, 20 } 和  { 5, 8, 2, 1, 6 } ,未排序之前

第二个子序列中的8在前面,现在对两个子序列进行插入排序,得到 { 3, 7, 8, 10, 20 } 和 { 1, 2, 5, 6, 8 } ,即 { 3, 1, 7, 2, 8, 5, 10, 6,

20, 8 } ,两个8的相对次序发生了改变。

堆排序不稳定的例子:{ 9, 5, 7, 5 },堆顶元素是9,堆排序下一步将9和第二个5进行交换,得到序列 { 5, 5, 7, 9 },再进行堆调整

得到{ 7, 5, 5, 9 },重复之前的操作最后得到{ 5, 5, 7, 9 }从而改变了两个5的相对次序

稳定的排序算法的好处:从一个键上排序,然后再从另一个键上排序,第一个键排序的结果可以为第二个键排序所用。这样,有可能减轻系统的开销。

举个例子:

在数据库操作中,如下简单表格:

2(1) 4
3 8
2(2) 5
1 2
4 9

上表格第一个列,如果需要第一列排序,且使用稳定排序算法可得到

1 2
2(1) 4
2(2) 5
3 8
4 9

如果使用非稳定的选择排序算法,则得到:

1 2
2(2) 5
2(1) 4
3 8
4 9

这样第二列并不是有序的。如果需要第二列有序,还需要再次排序一次。

排序算法稳定性的好处相关推荐

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

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

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

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

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

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

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

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

  5. 八大排序算法稳定性分析

    八大排序算法稳定性分析 稳定性定义: 排序前后两个相等的数相对位置不变,则算法稳定. 稳定性的好处: 从一个键上排序,然后再从另一个键上排序,第一个键排序的结果可以为第二个键排序所用. 各排序算法的稳 ...

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

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

  7. 常见排序算法 稳定性分析

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

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

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

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

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

最新文章

  1. react项目开发步骤_成为专业React开发人员的31个步骤
  2. 重磅 | 王劲被百度起诉后首露面:称打印机电脑已报废,赔了318块钱,没接到法院传票
  3. Python操作docx文档设置居中并创建表格
  4. groovy和java结合使用
  5. VB 读取资源文件里面的字符串
  6. Kubernetes 网络改进的三项实践分享
  7. VMware vSphere 5.1 群集深入解析(二十九)-故障排错
  8. Java中SimpleDateFormat用法详解
  9. sudo echo x **.** 时 base: : Permission denied
  10. LeetCode:18. 4Sum(Medium)
  11. 【读书笔记《Android游戏编程之从零开始》】5.Android 游戏开发常用的系统控件(ProgressBar、Seekbar)
  12. 通信原理大作业--基于MATLAB的数字通信系统仿真设计
  13. 【CSS】纯CSS实现三级导航(模板)
  14. 守望先锋等FPS游戏的网络同步
  15. Java 11 发布线路图:有哪些值得期待的新特性?
  16. 企业域名注册手续_如何注册域名以及ICP备案
  17. 学生宿舍管理系统(前端部分)
  18. vue配置文件不打包
  19. 2021-06-02-IPFS私有网络搭建
  20. pat甲级1013图柳神代码解析自学复盘

热门文章

  1. 论韩剧如何影响一个人
  2. importNew的好文章
  3. 输入法全角半角怎么切换?(右下角输入法右键--> 全半角--> 选择半角还是全角)
  4. canvas无法清除上一次画的线 clearRect无效
  5. 如何从0到1做好一项产品?(课上总结加上课外扩展)【产品经理】
  6. html5description标签,HTML中Meta标签的Keywords和Description独特见解
  7. CC2541的BLE协议栈构成
  8. Android系统中设置TextView的行间距
  9. C#方法摘要-汉字计数器
  10. 150个pbootcms网站模板(都是成品网站,上传php空间即可使用),建站必备