首先要说明一下,我们知道大O表示法把算法的效率分为四个级别:O(1),O(logN),O(N),O(N^2),分别对应优,良,中,差。
接下来我对三种排序算法做了测试(运行环境:JDK6.0,windows XP命令提示符下执行,AMD 速龙3800+ 2.0GHz,内存512MB DDRII 667两条,双通道。):
1、先是给一组数组随机赋值,然后把这个数组再复制出两个,分别用三种排序算法为这三组一样的数组进行排序。数组长度为1万,测得排序时间:
冒泡排序消耗时间:0.453
选择排序消耗时间:0.187
插入排序消耗时间:0.062
2、上面测试的结果中差距不是很大吧,那么把这三个数组扩大10倍,长度加到10万,我们看看结果:
冒泡排序消耗时间:49.109
选择排序消耗时间:21.781
插入排序消耗时间:9.016
这下消耗的时间差很多了。
3、测试最理想情况下(数组已经是升序排序了),各算法的消耗时间(此时各数组长度为1万):
冒泡排序消耗时间:0.187
选择排序消耗时间:0.218
插入排序消耗时间:0.0
选择排序消耗的时间居然比冒泡排序法多!!插入排序法几乎不需要时间!这是为什么呢??
原来在冒泡排序法中,最理想的情况下比较的效率为O(N^2),选择排序法也一样,而插入排序法只需要比较n-1次,也就是说它的效率是O(N)级别的。理想情况下冒泡排序法的交换次数是0。而选择排序法虽然没有交换数据,但每次都对临时变量赋值消耗了时间,所以在最理想情况下,它的效率反而比冒泡低了。插入排序法的情况和选择排序法一样,需要每次比较时进行赋值,但最理想情况下,它的比较次数本来就少,是O(N)级别的,它在比较次数上省下来的资源完全足够用来运行O(N)赋值操作。这样一分析,运行结果就可以解释了。
4、最糟糕情况下(数组已经是降序排序好了的,我们需要把它反过来用升序排序),各算法的消耗时间(此时各数组长度为1万):
可以先猜测一下结果:冒泡排序消耗时间最多,选择排序和插入排序消耗时间差不多。
运行一下看看:
冒泡排序消耗时间:0.422
选择排序消耗时间:0.172
插入排序消耗时间:0.172
分享到:
- 2007-12-15 22:40
- 浏览 1295
- 评论(2)
- 论坛回复 / 浏览 (2 / 2370)
- 查看更多
相关推荐
分析和计算算法效率的便捷方法 (杨朝霞兰州交通大学数理与软件工程学院,甘肃兰州 730070) : 摘 要: 通过对典型算法时间效率特征的分析,将求解算法时间复杂度的复杂过程进行简化,提出按算法的不同结构特性,具体问题...
各种排序算法效率分析比较及源代码 C语言实现 各种排序包括: 直接插入排序,折半插入排序,2—路插入排序和表插入排序;希尔排序和链式基数排序;起泡排序,快速排序,归并排序;简单选择排序,树形选择排序和堆...
第四课:算法效率的度量和存储空间需求 第五课:线性表的类型定义 第六课:线性表的顺序表示和实现 第七课:实验一 线性表的顺序存储实验 第八课:线性表的链式表示与实现 第九课:循环链表与双向链表 第十课...
数据结构的选择与算法效率 利用线段树解决picture问题解决,很经典
《算法效率与数据结构的选择》很详细地讲述了如何使用数据结构的选择使算法效率提高(里面有很多极精妙的技巧)
各种内部排序算法的时间复杂度分析结果只给出了算法执行的时间的阶,或大概执行时间。设计和实现内部排序算法效率比较平台,通过随机的数据比较各算法的关键字比较次数和关键字移动次数,以取得直观的感受。
包含C、C++所有的函数名称,介绍算法效率与程序优化
要求完成在正序、逆序、小规模数据量(10、30、50)和大规模数据量(100、1000、10000等)情况下以移动次数和比较次数来分析算法效率。 几种内部排序算法在进行时间复杂度分析的时候给出了算法执行的大概执行时间。...
本文档为数据结构课程设计:搜索算法效率比较。内容比较完整!
数据结构的选择 线性结构 树形结构 的算法讲解和题型分析
老师的课件,比较好懂容易,只花费1个资源分
搜索算法效率比较.pdf
算法设计与分析课件
内部排序算法效率比较: 直接排序 起泡排序 快速排序 简单选择排序 堆排序 希尔排序
本ppt共有70页,包括算法设计课程的绪论,涵盖该学科所有知识点;还包括算法效率分析。最后配有习题。
一个简单的算法效率对比,实验证明,快速排序的效率比冒泡的效率高出很多啊!
算法效率培训课程.pptx
数据结构课程设计 搜索算法效率比较 两江大学出版社
基于大数据处理的模式匹配算法效率分析.pdf