通过实验对比十大排序算法

前面给出了所有算法的实现,代码实现可能还有优化的空间,但也可以通过这些算法来实验大致分析每一种算法的优劣。

文章目录

  • 通过实验对比十大排序算法
  • 实验环境
  • 一、各个排序算法运行时间对比分析
    • 1、基于线性表逻辑实现的排序算法:
    • 2、基于二叉树逻辑实现的排序算法:
    • 3、基于散列表逻辑实现的排序算法:
  • 二、桶的个数对桶排序的影响
  • 总结

实验环境

随机生成[0,10000]的随机数,随机数的规模分别为10000,100000。运行3次去平均时间。

一、各个排序算法运行时间对比分析

1、基于线性表逻辑实现的排序算法:

分析比较: 从表中可以看出冒泡排序所消耗的时间最大,当数据规模越大,冒泡排序消耗时间与其他几种排序算法消耗时间差距越大。总体来看冒泡排序、选择排序和插入排序都在一个量级上,希尔排序是插入排序的优化,希尔排序的性能得到了很大的提升,和理论的平均复杂度表现大致一致。

2、基于二叉树逻辑实现的排序算法:

分析比较: 归并排序、快速排序、堆排序三种排序算法耗时在数量级上是一致的,在相同规模下,排序耗时比冒泡排序、选择排序、插入排序快100倍,1中的算法只有希尔排序能够与之一战。

3、基于散列表逻辑实现的排序算法:

分析比较: 桶排序和基数排序耗时竟然与1中的冒泡、选择、插入算法耗时在一个量级上,点都没有体现散列表的优势。这是因为,数据规模太大,桶的个数太少,每个桶中要装的数据就很大,散列表中的链表长度就会很长,散列表的性能就会向链表退化。所以桶排序可以增加桶的个数来提升效率。而基数排序的桶只有10个,没有提升空间,所以基数排序的使用场景是对多个关键码的排序,在对数字的排序并不能展现优势。计数排序是所有排序算法的天花板,比2中的排序算法还快10倍。

二、桶的个数对桶排序的影响

随机生成[0,10000]的随机数,数据规模为100000。
随着桶的个数增大,排序算法所消耗的时间图:

结论: 桶的个数越大,使得每个桶中的元素变少,所消耗的时间越小。当桶的个数与数组中最大数字一致时,此时桶排序消耗的时间最小,当每个桶中的元素为1时,这时桶排序所消耗的时间与计数排序一致,这就是桶排序的最好情况。从表中可以看出当桶为10000个时,桶排序的耗时与2中的算法在一个量级,而与计数排序差一个量级,因为生成的随机数始终会有大量的重复数字。


总结

十个算法每一个算法都很金典,都有其存在的意义,由于实验数据的规模和数据范围都会影响每个算法的效率,所以本次实验只能大致从数量级上对比每一个算法的优劣。有的算法可能还能进一步优化提升效率。本次实验只是单纯的对数字进行排序的实验,而实际情况不光是对数字进行排序,所以还得通过实际情况选择适合的排序算法。

通过实验对比十大排序算法相关推荐

  1. 排序算法——十大排序算法总结与对比

    一.十大排序算法复杂度对比 二.关于排序算法的总结 1.基数排序仅仅适用于整型数的排序,一般不与另外的排序方法一起比较. 2.关于算法的稳定性:不稳定的算法有 "快希选堆"--快速 ...

  2. 这或许是东半球分析十大排序算法最好的一篇文章

    作者 | 不该相遇在秋天 转载自五分钟学算法(ID:CXYxiaowu) 前言 本文全长 14237 字,配有 70 张图片和动画,和你一起一步步看懂排序算法的运行过程. 预计阅读时间 47 分钟,强 ...

  3. 经典十大排序算法(含升序降序,基数排序含负数排序)【Java版完整代码】【建议收藏系列】

    经典十大排序算法[Java版完整代码] 写在前面的话 十大排序算法对比 冒泡排序 快速排序 直接选择排序 堆排序 归并排序 插入排序 希尔排序 计数排序 桶排序 基数排序 完整测试类 写在前面的话   ...

  4. 十大排序算法(Java)

    文章目录 十大排序算法(Java) 一.冒泡排序(Bubble Sort) 二.选择排序(Selection Sort) 三.堆排序(Heap Sort) 四.插入排序(Insertion Sort) ...

  5. 中希尔排序例题代码_【数据结构与算法】这或许是东半球分析十大排序算法最好的一篇文章...

    码农有道 历史文章目录(请戳我) 关于码农有道(请戳我) 前言 本文全长 14237 字,配有 70 张图片和动画,和你一起一步步看懂排序算法的运行过程. 预计阅读时间 47 分钟,强烈建议先收藏然后 ...

  6. 【数据结构与算法】这或许是东半球分析十大排序算法最好的一篇文章

    原地址:https://mp.weixin.qq.com/s?__biz=MzIwNTc4NTEwOQ==&mid=2247486981&idx=1&sn=c63cd080be ...

  7. JS 实现十大排序算法

    文章目录 前言 零.十大排序 一.冒泡排序(bubbleSort) 二.选择排序(selectionSort) 三.插入排序(insertSort) 四.希尔排序(shellSort) 五.归并排序( ...

  8. JAVA十大排序算法动画_十大排序算法(java实现)

    [前言]最近在重新研究算法,此篇博文供自己复习使用也为方便广大程序员同学!此文代码均为自己实现,通过对比经典解法校验,若有错请读者及时提出! - [对比分析图]首先,我们先来对比分析一下这十大排序算法 ...

  9. 【十大排序算法系列】快速排序

    写在前面 上一篇更新了这个系列的排序算法([十大排序算法系列]冒泡排序).分析了冒泡的逻辑和优化点,下面来写下快速排序(为什么跳这么快?因为比较走心hhhh) 照例给出系列内所有算法的对比.. 常见的 ...

最新文章

  1. WinCE项目应用之车载导航
  2. [转]EOS智能合约 私链激活 基本操作
  3. #define CV_DEFAULT(val) = val 这样的宏定义是没有问题的~
  4. Python使用threading实现多线程
  5. visual studio编译linux,在 Visual Studio 中配置 Linux MSBuild C++ 项目
  6. python3记录(1) - 内置函数
  7. MFC中COMBO BOX的设置
  8. MySQL5.7.19解压版配置
  9. Windows下VB6.0开发——VB程序断点调试与顺序执行不一致问题(通信原因)
  10. clickhouse: A股bar数据与物化视图尝试
  11. oracle 认证视频,Oracle 认证专家视频教程-OCP全套教程【98集】_IT教程网
  12. 更新cuda驱动10.0==>11.2
  13. 08-A. 旅馆顾客统计(静态成员)
  14. go reflection
  15. 红米note3android驱动,为何我的红米NOTE3 装不了USB驱动
  16. AI云时代大幕开启,华为全栈AI产品线将迎春天
  17. 苹果电脑装 WIN7 黑屏问题解决办法
  18. Linux的常用命令思维导图
  19. Idea 合并分支只选取部分文件的办法
  20. TreeSet集合如何保证元素唯一

热门文章

  1. 条码标签编辑软件如何选择?
  2. TensorFlow2利用Auto-MPG数据集实现神经网络回归任务
  3. COOX基础培训之SCADA(二)
  4. 零基础怎么入门UI设计 需要学哪些内容
  5. 信息系统项目管理师-论文范例(风险篇)
  6. FineReport常用日期设置
  7. MatrixDB Mars存储引擎
  8. 分区格式化大于2 TiB磁盘
  9. Ucinet三天写论文!结构对等分析实战
  10. windows server下的 Nginx SSL 证书安装部署