按平均时间将排序分为四类:

  • 平方阶(O(n2))排序,一般称为简单排序,例如直接插入、直接选择和冒泡排序;
  • 线性对数阶(O(nlgn))排序,如快速、堆和归并排序;
  • O(n1+£)阶排序,£是介于0和1之间的常数,即0<£<1,如希尔排序;
  • 线性阶(O(n))排序,如桶、箱和基数排序。

因为不同的排序方法适应不同的应用环境和要求,所以选择合适的排序方法应综合考虑下列因素:

  • 待排序的记录数目n;
  • 记录的大小(规模);
  • 关键字的结构及其初始状态;
  • 对稳定性的要求;
  • 语言工具的条件;
  • 存储结构;
  • 时间和辅助空间复杂度等。

不同规模下,排序方法的选择

  • 若n较小(如n≤50),可采用直接插入或直接选择排序。当记录规模较小时,直接插入排序较好;否则因为直接选择移动的记录数少于直接插人,应选直接选择排序为宜。
  • 若文件初始状态基本有序(指正序),则应选用直接插人、冒泡或随机的快速排序为宜;
  • 若n较大,则应采用时间复杂度为O(nlgn)的排序方法:快速排序、堆排序或归并排序。

其他情况

  • 简单排序中直接插入最好,快速排序最快,当文件为正序时,直接插入和冒泡均最佳。
  • 快速排序是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键字是随机分布时,快速排序的平均时间最短;
  • 堆排序所需的辅助空间少于快速排序,并且不会出现快速排序可能出现的最坏情况。这两种排序都是不稳定的。
  • 若要求排序稳定,则可选用归并排序。

排序算法性能和使用场景总结相关推荐

  1. 冒泡和快速排序的时间复杂度_八大排序算法性能分析及总结

    一.排序算法说明 排序的定义:对一个无序的序列进行排序的过程. 输入:n个数:a1,a2,a3,-,an. 输出:n个数的排列:a1,a2,a3,-,an,使得a1<=a2<=a3< ...

  2. 【算法设计与分析】排序算法性能分析

    github:项目地址 一.实验目的 掌握选择排序.冒泡排序.合并排序.快速排序.插入排序算法原理 掌握不同排序算法时间效率的经验分析方法,验证理论分析与经验分析的一致性. 二.实验概述 排序问题要求 ...

  3. 五种内部排序算法性能比较——C++

    **五种内部排序算法性能比较 ** 1.直接插入排序算法 将一个待排序的记录插入到若干个已排好序的有序记录中的适当位置,从而得到一个新的.记录数增加1的有序数据序列,直到插入完成.在最开始,整个有序数 ...

  4. 各类排序算法比较和应用场景

    简介 插入排序 插入排序是一种较为简单的排序算法,它的基本思想是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入. 形象的可以理解为打扑克抓拍的过程,通常我们右手抓牌, ...

  5. 深圳大学算法实验一——排序算法性能分析

    深圳大学算法实验一 一.实验目的与要求 1. 掌握九种排序算法原理 2. 掌握不同排序算法时间效率的经验分析方法,验证理论分析与经验分析的一致性. 3. 对多种排序算法提出改进方案 4. 综合比较各种 ...

  6. 第十六周上机实践—项目2—大数据集上排序算法性能的体验

    /* *Copyright(c) 2015,烟台大学计算机学院 *All rights reserved. *文件名称:test.cpp *作者:林莉 *完成日期:2015年12月18日 *版本:v1 ...

  7. 几种排序算法性能的比较

    做个小笔记:

  8. 常用排序算法以及算法性能测试(完整C/C++代码实现)

    排序算法性能的比较 注: 由于只是测试算法性能, 所以不会对排序算法做深入讲解, 在随后的时间将会推出排序的详细讲解 问题需求分析 排序算法经过了很长时间的演变,产生了很多种不同的方法.每种算法主要针 ...

  9. c++ sort 从大到小排序_算法的艺术:MySQL order by对各种排序算法的巧用

    在 [精华]洞悉MySQL底层架构:游走在缓冲与磁盘之间 这篇文章中,我们介绍了索引树的页面怎么加载到内存中,如何淘汰,等底层细节.这篇文章我们从比较宏观的角度来看MySQL中关键字的原理.本文,我们 ...

  10. 十大经典排序算法详解

    本文转自 <卢明冬的博客> 文章目录 排序算法的分析和评价 2.十大排序经典算法总览 2.1 排序算法的分类 2.2 排序算法的性能 2.3 各阶复杂度性能对比 2.4 排序算法的初始状态 ...

最新文章

  1. 2-01基本顺序表与元素外置顺序表recv
  2. js关于表单校验完善
  3. pythonweb自动化测试实例_[转载]python webdriver自动化测试实例
  4. 二十六岁,裸辞之后,我步入了“三无”行列
  5. ios gpuimage输入和得到原始数据
  6. Qt5学习笔记之QString的使用
  7. Network install linux - Hacking initrd.img word doc archive
  8. The remote system refused the connection.
  9. 怎么看服务器是实体机还是虚拟机,如何判断一台机器是物理机还是虚拟机
  10. 女生叫你哥和大哥区别_大哥正望着你
  11. 如何用建木CI一键部署Java构件到Nexus
  12. java fianlly_Java冷知识:finally中的代码一定会执行吗?
  13. 编写程序计算两个矩阵之和。
  14. 【历史上的今天】8 月 2 日:字节跳动收购 Musical.ly;PlayStation 之父诞生;早期的女性计算机先驱
  15. 获取dingding审批实例
  16. BERT embedding 降维--BERT whitening
  17. c语言如何让字母右对齐,C语言printf格式的输出,右对齐零填充
  18. android v4l2 4路视频,美乐威推出四链路3G-SDI接口的4K M.2采集卡
  19. 马斯克痛失大将!特斯拉自动驾驶将驶向何方?
  20. 78页数字孪生+智慧楼宇解决方案

热门文章

  1. HDU 6043 Balala Power! 思维 + 码力
  2. 图片加载失败显示默认图片占位符
  3. OSChina 周六乱弹 —— 那些神一样的电视剧
  4. Zabbix 安装配置
  5. ABAP 内表(internal table) 标题行(header line) 工作区(work area) 简介 - [SAP]
  6. Qt学习之路_6(Qt局域网聊天软件)
  7. 一流的设计师,一流的PHOTOSHOP教程.....
  8. LWUIT的绘图功能
  9. 4.UML2 软件建模入门与提高 --- 用例图
  10. 7.企业应用架构模式 --- 分布策略