部排序算法的性能比较 飞鸽传书内部排序算法的性能比较

1)排序的稳定性及分析:

假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,ri=rj,且ri在rj之前,而在排序后的序列中,ri仍在rj之前,则称这种排序算法是稳定的;否则称为不稳定的。

(1)冒泡排序

冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。我们知道,冒泡排序的交换条件是:a[j]>a[j+1]或者a[j]<a[j+1]很明显不包括相等的情况,所以如果两个元素相等,他们不会交换;如果两个相等的元素没有相邻,那么即使通过前面的两两交换把两个相邻起来,这时候也不会交换,所以相同元素的前后顺序不会改变,所以冒泡排序是一种稳定排序算法。

(2)选择排序

选择排序是给每个位置选择当前元素最小的,比如给第一个位置选择最小的,在剩余元素里面给第二个元素选择第二小的,依次类推,直到第n-1个元素,第n个元素不用选择了,因为只剩下它一个最大的元素了。那么,在一趟选择,如果当前元素比一个元素小,而该小的元素又出现在一个和当前元素相等的元素后面,那么交换后稳定性就被破坏了。比较拗口,举个例子,序列5 8 5 2 9, 我们知道第一遍选择第1个元素5会和2交换,那么原序列中2个5的相对前后顺序就被破坏了,所以选择排序不是一个稳定的排序算法。

(3)插入排序

插入排序是在一个已经有序的小序列的基础上,一次插入一个元素。当然,刚开始这个有序的小序列只有1个元素,就是第一个元素。比较是从有序序列的末尾开始,也就是想要插入的元素和已经有序的最大者开始比起,如果比它大则直接插入在其后面,否则一直往前找直到找到它该插入的位置。如果碰见一个和插入元素相等的,那么插入元素把想插入的元素放在相等元素的后面。即和冒泡排序一样:a[j]>a[j+1]或者a[j]<a[j+1]很明显不包括相等的情况,所以如果两个元素相等,他们不会交换;所以,相等元素的前后顺序没有改变,从原无序序列出去的顺序就是排好序后的顺序,所以插入排序是稳定的。

(4)快速排序

快速排序有两个方向,左边的i下标一直往右走,当a[i] <= [center_index](center_index中枢元素的数组下标),一般取为数组第0个元素。而右边的j下标一直往左走,当a[j] > a[center_index]。如果i和j都走不动了,i <= j, 交换a[i]和a[j],重复上面的过程,直到i>j。 交换a[j]和a[center_index],完成一趟快速排序。在中枢元素和a[j]交换的时候,很有可能把前面的元素的稳定性打乱,比如序列为 5,3,3,4,3,8,9,10,11, 现在中枢元素5和3(第5个元素,下标从1开始计)交换就会把元素3的稳定性打乱,所以快速排序是一个不稳定的排序算法,不稳定发生在中枢元素和a[j]交换的时刻。

快速排序是高效排序算法了。实践证明,快速排序是所有排序算法中最高效的一种。它采用了分治的思想:先保证列表的前半部分都小于后半部分,然后分别对前半部分和后半部分排序,这样整个列表就有序了。这是一种先进的思想,也是它高效的原因。因为在排序算法中,算法的高效与否与列表中数字间的比较次数有直接的关系,而"保证列表的前半部分都小于后半部分"就使得前半部分的任何一个数从此以后都不再跟后半部分的数进行比较了,大大减少了数字间不必要的比较。但查找数据得另当别论了。

(5)归并排序

所谓“归并”,试讲两个或两个以上的有序文件合并成一个新的有序文件。归并排序是把一个有n个记录的无序文件看成是由n个长度为1的有序子文件组成的文件,然后进行两两归并,得到[n/2]个长度为2或1的有序文件,再两两归并,如此重复,直至最后形成包含n个记录的有序文件为止。所以,归并排序也是稳定的排序算法。

(6)基数排序

基数排序的思想是按组成关键字的各个数位的值进行排序,他是分配排序的一种。基数排序是按照低位先排序,然后收集;再按照高位排序,然后再收集;依次类推,直到最高位。有时候有些属性是有优先级顺序的,先按低优先级排序,再按高优先级排序,最后的次序就是高优先级高的在前,高优先级相同的低优先级高的在前。为了减少记录的移动次数,队列可以采用链式存储分配,称为链队列。基数排序基于分别排序,分别收集,所以其是稳定的排序算法。

(7)希尔排序(shell)

希尔排序又称为“缩小增量排序”是按照不同步长对元素进行插入排序,当刚开始元素很无序的时候,步长最大,所以插入排序的元素个数很少,速度很快;当元素基本有序了,步长很小,插入排序对于有序的序列效率很高。关键步骤是取增量d,那全体记录分成d组,进行直接插入排序,直到d=1.所以,希尔排序的时间复杂度会比o(n^2)好一些。由于多次插入排序,我们知道一次插入排序是稳定的,不会改变相同元素的相对顺序,但在不同的插入排序过程中,相同的元素可能在各自的插入排序中移动,最后其稳定性就会被打乱,所以shell排序是不稳定的。

(8)堆排序

我们知道堆的结构是节点i的孩子为2*i和2*i+1节点,大顶堆要求父节点大于等于其2个子节点,小顶堆要求父节点小于等于其2个子节点。在一个长为n的序列,堆排序的过程是从第n/2开始和其子节点共3个值选择最大(大顶堆)或者最小(小顶堆),这3个元素之间的选择当然不会破坏稳定性。但当为n /2-1, n/2-2, ...1这些个父节点选择元素时,就会破坏稳定性。有可能第n/2个父节点交换把后面一个元素交换过去了,而第n/2-1个父节点把后面一个相同的元素没有交换,那么这2个相同的元素之间的稳定性就被破坏了。所以,堆排序不是稳定的排序算法。

飞鸽传书内部排序算法的性能比较相关推荐

  1. 数据结构实验:内部排序算法的性能分析

    文章目录 前言 一.问题描述 二.问题分析 三.实验结果及分析 (1)实验数据描述 (2)实验结果 (3)性能分析 四.源代码 前言 记录下本学期的数据结构实验 本实验主要集中于比较几种内部排序算法 ...

  2. 飞鸽传书内部护眼神功

    作为程序员,飞鸽传书天天要对着点电脑,长时间的对着屏幕,眼睛未免受到许多伤害,我们如何保护好自己的眼睛呢,这要靠我们平时多加注意了. 饮食和日常的保养是照顾好你眼睛的两个重要因素. 以下是保护眼睛的一 ...

  3. 【转载】飞鸽传书2013官方下载

    妈妈在生活上爱护我,我急得到处找,我们又来到了大舟冲浪的队伍里,接着,等我从房间出来看,科学家研制出许多保护环境的飞鸽传书办法,有一次,我闯五关斩六将的走向决战的战场,这件事怎能不是我后悔呢. 那么, ...

  4. 飞鸽传书不能传送文件

    苹果是喜光性果树.据测定,多数品种的光补偿点为600-940勒克斯,饱和点为24000-75000勒克斯.光照不足,直接降低光合作用和树体营养水平,并影响果实着色和糖分转化:强烈的直射光过多和照射的时 ...

  5. 内部排序算法全面总结

    排序的概念 排序,就是重新排列表中的元素,使表中的元素按照关键字有序的过程. 我所了解的 表 多半是顺序表,因为顺序表实现较为简单,但是链表结构同样可以实现很多排序算法. 定义中的元素一般指什么元素呢 ...

  6. 飞鸽传书2007绿色版提供了无限量内部沟通方案

    网络C++的初级阶段,大家都有一样的心情,想方设法将外链做起来,让百度蜘蛛对网站感兴趣,重点做关键词,天天盯着排名看.这些事情做到一定阶段就不能当成主要的事情来抓了.外链为辅,内容为王,网站内容建设才 ...

  7. 飞鸽传书联系企业内部管理机制

    IM飞鸽能使企业内部管理机制联系起来,能从一个全新的视角看到IM飞鸽(飞鸽传书)软件对于企业用户的意义.同时IM飞鸽(飞鸽传书)软件的突出优势不是去追求差异化和个性化,而在于发挥局域网特有的效率优势, ...

  8. 五种内部排序算法性能比较——C++

    **五种内部排序算法性能比较 ** 1.直接插入排序算法 将一个待排序的记录插入到若干个已排好序的有序记录中的适当位置,从而得到一个新的.记录数增加1的有序数据序列,直到插入完成.在最开始,整个有序数 ...

  9. 飞鸽传书谈哈希表之数学原理

    这里的文章是飞鸽传书谈哈希表之数学原理转载的,作者:niniwzw 15:08 2010-5-6 .NET程序员,大多数时候是不需要数学的.因为,有了.NET, 数据结构和算法的重要性被弱化了,操作系 ...

最新文章

  1. 李宏毅机器学习作业2:Winner还是Losser(含训练数据)
  2. 轻松掌握Ajax.net系列教程二:部署Ajax Control Toolkit
  3. 移动端效果之Picker
  4. Aruba与中国电信国际有限公司达成战略合作 助力中国企业扬帆出海
  5. TCP校验值的伪头以及校验值计算
  6. 【转】winIO的解释与使用
  7. Sqlserver数据库还原.bak文件失败的两个问题
  8. ELDD Chapter 2..3 Linux Kernel Facilities
  9. SpringCloud核心组件讲解
  10. 我的大数据之路(一)-数据仓库也需要大数据
  11. Export2Excel--Excel导出功能
  12. 推荐三个开源无刷电机驱动的开源网站
  13. configmapsecrets基本操作
  14. 数学建模竞赛常用软件培训1
  15. VR/AR/MR/CR/XR概念及应用
  16. 六款最佳、免费的网络延迟测试工具
  17. crontab 每天凌晨12点定时器_crontab命令定时备份执行脚本
  18. canvas 绘点图
  19. DataV(对象类)未来三天天气状态显示对应图标,格式:{ “results“:[ { “location“:{},“daily“:[ {},{}] ] }
  20. 批处理为win7桌面添加计算机图标,win7桌面图标不见了图文解决方案

热门文章

  1. windows dc linux,active-directory – Linux AD集成,使用Windows Server 2012 DC时无法登录
  2. android tag 快捷_Android Studio快捷键使用
  3. java黄金分割点游戏_结对编程1——黄金点小游戏项目简介及需求分析
  4. oracle的基本概念,oracle的基本概念
  5. datagrip将一个数据库中的数据_跨平台数据库管理神器DataGrip,用上就爱不释手...
  6. VM Ware 虚拟机centos 时间与本地时间不一致
  7. java按照商品价格排序_按照指定的类型排序
  8. apache如何在虚拟主机中实现用户验证
  9. ActiveMQ 的独占消费模式
  10. 两个企业级产品设计思路:流程效率指标功能生命周期长度