九种常用排序的性能分析总结

转自:http://blog.csdn.net/cjf_iceking/article/details/7953637

目录(?)[-]

  1. 算法复杂度以及稳定性分析
  2. 排序的时间效率比较

    间间断断的将9种排序实现,并且将其以博客笔记的形式记录下来;现在就该来综合的分析这九种排序,让我们先来看看其算法复杂度和稳定性的分析结果:

算法复杂度以及稳定性分析

算法名称 平均时间 辅助空间 稳定性
冒泡排序 O(n2) O(1)
选择排序 O(n2) O(1)
插入排序 O(n2) O(1)
自底向上归并排序 O(nlog2n) O(n)
自顶向下归并排序 O(nlog2n) O(n)
快速排序 O(nlog2n) O(n)
堆排序 O(nlog2n) O(1)
基数排序 O(dn) O(rn)
希尔排序 \ O(1)

排序的时间效率比较

下图表名了各种算法在不同数据规模下,完成排序所消耗的时间(毫秒为单位),从表中可以显然看出O(n2)的排序算法比O(nlog2n)的算法 时间多出几百上千倍,而且随着数据数据规模增大时间比也会随着增大;因为排序的数据采用随机数,顺序将被打乱,快速排序算法优于其他排序算法!
算法名称 1万 2万 3万 4万 5万 6万 7万 8万 9万 10万
冒泡排序 1442 5497 12206 21861 34017 49148 67394 88880 111939 139071
选择排序 199 816 1790 3254 5062 7166 9645 12636 16102 19643
插入排序 178 717 1628 2882 4458 6446 8822 11649 14547 17914
自底向上归并排序 3 6 9 12 15 18 22 26 28 33
自顶向下归并排序 3 7 11 15 18 23 27 31 36 40
快速排序 2 5 8 11 14 18 21 25 29 32
堆排序 3 7 12 16 19 23 26 30 34 37
基数排序 9 21 30 40 49 59 66 75 90 98
希尔排序 3 8 11 15 24 24 29 35 40 41

下面采用图表形式将数据直观展示出来(将O(n2)的算法和O(nlog2n)算法分开,因为完全不是一个数量级的):

九种常用排序的性能分析总结_第1张图片
上图显示快排速度和自底向上归并排序奇虎相当,接下来是堆排序、希尔排序;出乎意料的是基数排序,号称O(dn)的基数排序却不是那么靠前,个人觉得和冒泡排序速度慢的原因相同,赋值操作太多,降低了时间效率。


修正更新:
 2012-9-13
【1】 修改归并排序的代码,并重新生成测试结果 
【2】 上传九种排序的实现代码(下载地址:http://download.csdn.net/detail/cjf_iceking/4567202)

0
0
猜你在找
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
快速回复 TOP
    个人资料
    九种常用排序的性能分析总结_第2张图片
    hjwang1
    • 访问:231522次
    • 积分:3378
    • 等级:
    • 排名:第5764名
    • 原创:38篇
    • 转载:459篇
    • 译文:1篇
    • 评论:58条
    文章分类
  • Apple(6)
  • java(47)
  • Jetty(5)
  • linux(83)
  • Log4j(1)
  • python(1)
  • WebServer(21)
  • 云计算(60)
  • 版本管理(6)
  • 管理(17)
  • cache(26)
  • 人工智能(51)
  • web前端(19)
  • 图像与音视频(63)
  • 关系数据库(19)
  • 认证与鉴权(2)
  • android(81)
  • 测试(8)
  • B2C(1)
  • 算法(36)
  • 广告(1)
  • 硬件(13)
  • windows(3)
  • 产品设计(3)
    文章存档
  • 2016年02月(1)
  • 2016年01月(7)
  • 2015年12月(8)
  • 2015年11月(12)
  • 2015年09月(9)
  • 2015年08月(7)
  • 2015年07月(4)
  • 2015年06月(3)
  • 2015年05月(14)
  • 2015年04月(2)
  • 2015年03月(23)
  • 2015年02月(6)
  • 2015年01月(17)
  • 2014年12月(5)
  • 2014年11月(2)
  • 2014年09月(1)
  • 2014年06月(1)
  • 2014年05月(4)
  • 2014年03月(4)
  • 2014年01月(22)
  • 2013年12月(38)
  • 2013年11月(34)
  • 2013年10月(2)
  • 2013年09月(45)
  • 2013年08月(3)
  • 2013年06月(1)
  • 2013年05月(5)
  • 2012年09月(1)
  • 2012年07月(3)
  • 2012年06月(19)
  • 2012年05月(13)
  • 2012年04月(21)
  • 2012年03月(10)
  • 2012年02月(13)
  • 2012年01月(3)
  • 2011年12月(11)
  • 2011年11月(40)
  • 2011年10月(22)
  • 2011年09月(16)
  • 2011年08月(2)
  • 2011年07月(8)
  • 2011年06月(12)
  • 2011年05月(4)
  • 2011年01月(2)
  • 2010年08月(7)
  • 2010年07月(1)
  • 2010年06月(3)
  • 2010年05月(3)
  • 2010年04月(2)
  • 2009年08月(1)
    阅读排行
  • squid配置-cache_peer和cache_peer_domain详解(6706)
  • 使用GIMP实现图片的背景透明(3874)
  • 实现hadoop中的机架感知(Rack aware)(3051)
  • hbase 命令(2794)
  • 酷壳网陈皓:由12306.cn谈谈网站性能技术(2727)
  • 谷歌发布世界上首个开源的HTML5 SIP客户端(2507)
  • VisualVM jmx rmi jvm 监控(2010)
  • B2C电子商务网站的组织架构(1994)
  • 关于网络广告及其收费标准(1863)
  • 凡客(1807)
    评论排行
  • hbase 接口(7)
  • 关于Android 添加系统级(java)服务和调用的编写实现说明(7)
  • linux 常用命令(4)
  • 网络便签与网络通讯录(3)
  • windows下使用vc2008编译librtmp(3)
  • hbase 命令(2)
  • 凡客(2)
  • Ubuntu12.4 下 WebRTC编译(2)
  • Facebook Haystack 管理百亿照片(1)
  • 发布打war包dos命令(1)
    推荐文章
    • *Android自定义ViewGroup打造各种风格的SlidingMenu
    • * Android 6.0 运行时权限处理完全解析
    • * 数据库性能优化之SQL语句优化
    • *Animation动画详解(七)——ObjectAnimator基本使用
    • * Chromium网页URL加载过程分析
    • * JavaScript “跑马灯”抽奖活动代码解析与优化(一)
    最新评论
  • Ubuntu12.4 下 WebRTC编译

    hjwang1: webrtc的历史比较简单如下:2010年Google以6820万美元收购VoIP软件开发商Glob...

  • Ubuntu12.4 下 WebRTC编译

    hjwang1: webrtc的历史比较简单如下:2010年Google以6820万美元收购VoIP软件开发商Glob...

  • USB 2.0 A型、B型、Mini和Micro接口定义及封装

    liuchangjian123: vb vb v bv v bsd d sd

  • 关于Android 添加系统级(java)服务和调用的编写实现说明

    hjwang1: getSystemService方法有所改变,前面变成了大段的静态注册registerService...

  • 关于Android 添加系统级(java)服务和调用的编写实现说明

    hjwang1: 同样的问题,在编译framework时报错误:No rule to make target `out...

  • 关于Android 添加系统级(java)服务和调用的编写实现说明

    hjwang1: frameworks\base\services\java\ 目录下有android.mk文件,在此...

  • 关于Android 添加系统级(java)服务和调用的编写实现说明

    hjwang1: 直接进入到源码目录下的framework/base目录,执行mm(需要在源码目录下执行. build...

  • 关于Android 添加系统级(java)服务和调用的编写实现说明

    hjwang1: Android中的一个应用程序可以单独编译,编译后要重新生成system.img在源码目录下执行. ...

  • 关于Android 添加系统级(java)服务和调用的编写实现说明

    hjwang1: 在源码下面, make framework就可以生成framewrok.jar然后用adb pus...

  • 关于Android 添加系统级(java)服务和调用的编写实现说明

    hjwang1: 1.下面方法适合真机:下载android源码,然后编译你修改的framwork的代码,会生成fram...

    优秀博客
    C语言精通者
    算法非常精通者
    hadoop平台爱好者
    淘宝数据平台与产品部官方博客
    存储精通者
    小李专栏
    服务器、前端、后台,侧重3P
    算法研究者
    范俊升
    java|unix|db
    mysql
    搜索引擎
    dojo中文博客
    算法与cpp
    专注于Windows编程
    Kernel、Drivers、ARM
    Java纵深
    DB分表、J2EE
    enic博客
    薛笛-java报表
    算法
    TCP协议
    RTMP协议
    Red5音视频
    Red5—BLOOG
    loadrunner—BLOOG
    ffmpeg
    南非蚂蚁 的BLOG
    dalvik虚拟机
    嵌入式Linux
    优秀网站
    关于网络与Linux的知识平台
    Squid中文权威指南
    LVS中文站点
    infoQ中文站
    流媒体
    雷霄骅ffmpeg
    Linux C 语言
    算法与机器学习
    S5PV210
    Hadoop系列
    简朝阳
    Robot
    android4.0.3源码解读
    hoojo专注java
    ROS资料
    Android系统移植
    腾讯开源
    我的CSDN
    我的收藏
    我的资源

你可能感兴趣的:(九种常用排序的性能分析总结)