博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
排序算法小结
阅读量:5312 次
发布时间:2019-06-14

本文共 930 字,大约阅读时间需要 3 分钟。

本blog总结了常见的排序算法,笔者在以下几篇随笔中,用简洁而概括的语言和图表描述了算法的内容、思想、运行时间等等,其中算法的伪代码描述都是摘自《算法导论》一书。希望能给大家带来一些收获。

  

  

  

  

  

  

  

  

 

排序算法主要分为两种,一是比较排序,二是非比较排序。

比较排序(comparison sort)
  插入排序、归并排序、堆排序、快速排序都是比较排序。它们通过对数组中的元素比较来进行排序。
  定理:任意一个比较排序算法在最坏情况下,都需要做Ω(n lg n)次的比较
  推理:堆排序和归并排序都是渐进最优的比较排序算法
 
  1、插入排序:最坏情况运行时间为Θ(n2),对小规模输入来说是一个快速的原地排序算法。
  2、归并排序:渐进运行时间Θ(n lg n),其中的merge程序不在原地操作
  3、堆排序:在O(n lg n)时间内对n个数进行原地排序。
  4、快速排序:另一种对n个数进行原地排序的算法,但是最坏情况运行时间为Θ(n2),平均运行时间为Θ(n lg n),在实际中常常优于堆排序。像插入排序一样,快速排序的代码比较紧凑,所以它的运行时间中隐含的常数因子就比较小。对于大输入数组的排序来说,是一种很常用的算法。
 
非比较排序
  以下几种非比较排序算法,都对输入数组做了某些假设,对特定类型的数组进行排序时,这几种排序算法都能突破Ω(n lg n)的下界。
  1、计数排序,假设n个待排序元素,每个元素的值都在0~k之间,k为某个整数。
  2、基数排序,假设给定n个d位数,每一个数位可以取k种可能的值,k为O(n)。
  3、桶排序,假设输入实数均匀而独立的分布在区间 [0,1)上。

 

各排序算法运行时间

对于下表中的数据,我们先做如下假设:

  对于计数排序,待排序的元素都是在集合{0,1,...,k}中的整数。
  对于基数排序,每一个元素都是d位的数字,每一位都只有k种可能的值。
  对于桶排序,元素是在区间[0,1)上互异的实数。

 

 

转载于:https://www.cnblogs.com/windlaughing/archive/2013/05/22/3093013.html

你可能感兴趣的文章
转载 python多重继承C3算法
查看>>
【题解】 bzoj1597: [Usaco2008 Mar]土地购买 (动态规划+斜率优化)
查看>>
css文本溢出显示省略号
查看>>
git安装和简单配置
查看>>
面向对象:反射,双下方法
查看>>
鼠标悬停提示文本消息最简单的做法
查看>>
Java面向对象重要关键字
查看>>
课后作业-阅读任务-阅读提问-2
查看>>
面向对象设计中private,public,protected的访问控制原则及静态代码块的初始化顺序...
查看>>
fat32转ntfs ,Win7系统提示对于目标文件系统文件过大解决教程
查看>>
Awesome Adb——一份超全超详细的 ADB 用法大全
查看>>
shell cat 合并文件,合并数据库sql文件
查看>>
Android 将drawable下的图片转换成bitmap、Drawable
查看>>
介绍Win7 win8 上Java环境的配置
查看>>
移动、联通和电信,哪家的宽带好,看完你就知道该怎么选了!
查看>>
Linux设置环境变量的方法
查看>>
Atitit.进程管理常用api
查看>>
构建自己的项目管理方案
查看>>
利用pca分析fmri的生理噪声
查看>>
div水平居中且垂直居中
查看>>