超详细!各种内部排序算法的比较

先来个表格总结直观展示下:

各种内部排序算法的性质
           算法种类                   时间复杂度 空间复 杂度稳定性
最好情况平均情况最坏情况
插入排序直接插入排序O(n)O(n^2)O(n^2)O(1)稳定
折半插入排序O(n)O(n^2)O(n^2)O(1)稳定
希尔排序O(n^1.3)O(nlogn)O(n^2)O(1)不稳定
交换排序冒泡排序O(n)O(n^2)O(n^2)O(1)稳定
快速排序O(nlogn)O(nlogn)O(n^2)O(logn)不稳定
选择排序简单选择排序O(n^2)O(n^2)O(n^2)O(1)不稳定
堆排序O(nlogn)O(nlogn)O(nlogn)O(1)不稳定
归并排序二路归并排序O(nlogn)O(nlogn)O(nlogn)O(n)稳定
              基数排序O(d(n+r))O(d(n+r))O(d(n+r))O(r)稳定

 

下面详细说明一下:

 1.时间复杂度:(不包括基数排序)

平均情况下,快速排序、希尔排序(和增量有关,n在特定范围内为O(n^1.3))、归并排序、堆排序时间复杂度为O(nlogn),其他均为O(n^2);

最坏情况下,快速排序、希尔排序为O(n^2),其他均和平均情况下相同;

最好情况下,直接插入排序、折半插入排序、冒泡排序时间复杂度为O(n)(初始序列有序)。

2.空间复杂度:

快速排序O(logn),2路归并排序O(n),基数排序O(r),其他都是O(1)。

3.稳定性:

希尔排序、快速排序、简单选择排序、堆排序不稳定,其他都是稳定的。

4.其他:

经过一趟排序,能保证一个元素到达最终位置:交换排序(冒泡排序、快速排序)、选择排序(简单选择排序、堆排序)。

5.例题:

若输入数据存储在带头结点的双向循环链表中,下面排序算法是否仍然适用?

  • 快速排序:适用。因为可以快速定位到第一个元素和最后一个元素结点,然后通过1个指针从头部向后移动,另外一个指针从尾部向前移动,逐一与基准元素进行比较,并能够通过修改指针完成结点交换操作。
  • 直接插入排序:适用。因为可以方便地找到前驱后继和通过修改指针完成结点交换操作。
  • 简单选择排序:适用。因为只需要移动指针遍历链表并通过修改指针完成结点交换。
  • 堆排序:不适用。因为双向循环链表无法很方便地找到完全二叉树的双亲与孩子结点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员班长

感谢您的一路相伴

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值