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

各种内部排序算法的性质
           算法种类                    时间复杂度  空间复 杂度 稳定性
最好情况 平均情况 最坏情况
插入排序 直接插入排序 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个指针从头部向后移动,另外一个指针从尾部向前移动,逐一与基准元素进行比较,并能够通过修改指针完成结点交换操作。
  • 直接插入排序:适用。因为可以方便地找到前驱后继和通过修改指针完成结点交换操作。
  • 简单选择排序:适用。因为只需要移动指针遍历链表并通过修改指针完成结点交换。
  • 堆排序:不适用。因为双向循环链表无法很方便地找到完全二叉树的双亲与孩子结点。

超详细!各种内部排序算法的比较相关推荐

  1. 超详细的八大排序算法的各项比较以及各自的特点

    一.八大排序算法的总体比较 二.算法各自的特点(具体实现见后面博客) 1.快排 (1)算法思想 选择一个基准元素,将比基准元素小的元素放在其前面,比基准元素大的元素放在其后面,然后在将小于基准值元素的 ...

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

    部排序算法的性能比较 飞鸽传书内部排序算法的性能比较 1)排序的稳定性及分析: 假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,ri=r ...

  3. 数据结构之排序算法:内部排序算法的应用与比较

    排序算法:内部排序算法的应用与比较 思维导图: 比较: 应用: 思维导图: 比较: 应用:

  4. 数据结构之内部排序算法总结笔记

    内部排序算法  排序的基本概念: 把一组无序的数据元素按照关键字值递增(或递减)的顺序重新排列.  一.插入排序 思想:将序列分为[有序段]与[无序段]两段,然后依次将[无序段]中的元素插入到[有序段 ...

  5. 《数据结构》--内部排序算法比较

    题目 各种内部排序算法的时间复杂度分析结果只给出了算法执行时间的阶,或大概执行时间.试通过随机的数据比较各算法的关键字比较次数和关键字移动次数,以取得直观感受. 基本要求: (1) 从以下常用的内部排 ...

  6. 内部排序算法比较-数据结构C语言课设

    名称:内部排序算法比较 内容:在教科书中,各种内部排序算法的时间复杂的分析结果只给出了算法执行时间的阶,或大概执行时间.试通过随机数据比较各种算法的关键字比较次数和关键字移动次数,以取得直观感受. 任 ...

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

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

  8. 《内部排序算法比较》

    <内部排序算法比较> 一.[问题描述] 在教科书中,各种内部排序算法的时间复杂度分析结果只给出算法的大致执行时间.试通过随机数据比较各算法的关键字比较次数和关键字移动次数,以获得直观感受 ...

  9. 九大内部排序算法(快速排序、归并排序、堆排序、希尔排序、基数排序)

    排序(Sorting)是计算机程序设计中的一种重要操作,它的功能是将一个数据元素(或记录)的任意序列,重新排列成一个按关键字有序的序列. 文章目录 由于待排序的记录数量不同,使得排序过程中涉及的存储器 ...

最新文章

  1. 南京师范大学计算机技术调剂,南京师范大学2017年研究生调剂信息
  2. python nDPI 流量分析框架 Nfstream 简介
  3. linux常用工具命令
  4. workbook对象需要关闭_XSSFWorkbook对象 进行zip打包时 用write资源流自动关闭处理办法...
  5. 安裝linux後的內核調優
  6. 如何允许远程连接到MySQL
  7. 启动关闭HadoopSpark历史服务
  8. 智能优化算法:水循环算法-附代码
  9. 模态框 modal.js
  10. FPGA 按键控制数码管
  11. oracle 10g 各版本下载地址
  12. python 知乎 sklearn_最全知乎专栏合集:编程、python、爬虫、数据分析、挖掘、ML、NLP、DL......
  13. 创建内嵌SIS文件的安装包
  14. TP50 TP90 TP99 TP999 详细说明
  15. 想到我爱你的绝对不正常
  16. 问号在c语言里面的作用,问号的作用是什么-写作基础知识
  17. 爬虫:UnicodeDecodeError: 'gbk' codec can't decode byte 0xa6 in position
  18. 【学习笔记】狄利克雷卷积
  19. Oracle 19c VLDB and Partitioning Guide 第4章:分区管理 读书笔记
  20. 如何培养一个搞垮公司的全栈工程师?

热门文章

  1. Crawler:基于requests库+urllib3库+伪装浏览器实现爬取抖音账号的信息数据
  2. 成功解决TypeError: tuple indices must be integers or slices, not str
  3. DL框架之MXNet :深度学习框架之MXNet 的简介、安装、使用方法、应用案例之详细攻略
  4. Java编程思想:擦除的神秘之处
  5. 总结 | 如何测试你自己的 RubyGem
  6. 为什么创业者专注做一个产品最好?
  7. CxImage图像处理类库说明3(转载)
  8. 在线 Sql Server 服务无法启动的解决办法
  9. IAR环境下STM32+IAP方案的实现(转)
  10. 爬虫篇——User-Agent爬取备用及存储