前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >7.6.1 内部排序算法的比较

7.6.1 内部排序算法的比较

作者头像
week
发布2018-08-27 10:05:20
6830
发布2018-08-27 10:05:20
举报
文章被收录于专栏:用户画像用户画像

各种内部算法的比较及应用

基于四个因素进行对比:时间复杂度,空间复杂度,算法的稳定性,算法的过程特征。

一、从时间复杂度看

1、简单选择排序、直接插入排序和冒泡排序的平均情况下的时间复杂度都为O(n^2),并且实现过程比较简单,但直接插入排序和冒泡排序在最好的情况下时间复杂度可以达到O(n)。而且简单选择排序则与序列的初始状态无关。

2、希尔排序作为插入排序的拓展,对较大规模的排序都可以达到很高的效率,但目前未得出其精确的渐进时间。

3、堆排序是利用了一种称为堆的数据结构,可以在线性时间内完成建堆,而且在O(nlog2n)内完成排序过程。

4、快速排序时基于分治的思想,虽然在最坏的情况下快速排序时间会达到O(n^2),但快速排序的平均性能可以达到O(nlog2n),在实际应用中,常常优于其他排序算法。

5、归并排序同样是基于分治的思想,但由于其分割子序列与初始序列的排序无关,因此它的最好、最坏和平均时间复杂度均是O(nlog2n)。

二、从空间复杂度来看

1、简单选择排序、插入排序、冒泡排序、希尔排序和堆排序都仅需要借助常数个辅助空间。

2、快速排序在空间上只使用一个小的辅助栈,用于实现递归,平均情况下大小为O(log2n),当然在最坏的情况下,可能会增长到O(n)。

3、二路归并排序在合并操作中需要借助较多的辅助空间用于复制,大小为O(n)。

三、从稳定性看

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

而简单选择排序(2,2,1 ->1,2,2)

快速排序(3,2,2->2,2,3)

希尔排序(当相同的关键字被划分到不同的子表是,可能会改变他们之间的相对次序,如3,2,2->2,2,3)

堆排序(1,2,2->1,2,2)

都是不稳定的排序方法。

三、从过程特性来看

冒泡排序和堆排序每次循环后能产生当前的最大值和最小值

快速排序一次循环就确定一个元素的最终位置

算法种类

最好情况

平均情况

最差情况

空间复杂度

是否稳定

直接插入排序

O(n)

O(n^2)

O(n^2)

O(1)

冒泡排序

O(n)

O(n^2)

O(n^2)

O(1)

简单选择排序

O(n^2)

O(n^2)

O(n^2)

O(1)

希尔排序

O(1)

快速排序

O(nlog2 n)

O(nlog2 n)

O(n^2)

O(nlog2 n)

堆排序

O(nlog2 n)

O(nlog2 n)

O(nlog2 n)

O(1)

2-路归并排序

O(nlog2 n)

O(nlog2 n)

O(nlog2 n)

O(n)

基数排序

O(d(n+r))

O(d(n+r))

O(d(n+r))

O(r)

其中r表示数字的位数,n表示数字的个数

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015年12月05日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档