标题:几种排序算法效率比较
只看楼主
long0042
Rank: 2
等 级:论坛游民
帖 子:38
专家分:50
注 册:2008-3-5
得分:0 
回复 9楼 pangding
嗯。 你写的我懂了。思想一样,我用的是递归。你是迭代。这就是唯一的区别了。呵呵。
2012-07-26 09:51
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
得分:0 
没仔细看你的代码,不过我还真是很少看见把堆排写成递归的呢。

你第二波数据没测第一种快排,是不是因为慢得太多?快排的缺点就是怕恶化。但是数据是否会恶化提前又不知道。STL 的库函数 sort(),用的就是三点快排。而且当快排递归深度达到一定的域值之后,就会换用其它排法排序。就是怕恶化过度。
你用递减的数列去测,或者拿峰谷状数据去做做测试(就是数据是由小变大再由大变小,或者是相反),没准结果又不一样了。
快排恶化后会变得很糟,而堆排就不那么敏感。从你的测试结果也能看出这点。
2012-07-26 15:56
long0042
Rank: 2
等 级:论坛游民
帖 子:38
专家分:50
注 册:2008-3-5
得分:0 
回复 12楼 pangding
是这样的。第一种快速排序在遇到顺序的时候,可能和数据量有关系, 当数据量达到一定程度的时候程序会崩掉。怀疑是栈空间被耗尽了。
你后面提到的从大到小的数据排序,或者是峰谷的那种数据,也测试了一下。第二种快速排序可以适应。缺点就是你说的,它的速度和数据有关系,不够稳定。 堆排序确实是要稳定很多,基本上对于每种数据没有变化。这个估计就是堆排序中,第一步创建初始堆的时候起到的作用。不管是何种数据,他都会先整理为一定规律的数据,后面都是用那么多次运算。所以比较稳定。
2012-07-26 16:48
罗庇鹏ksq
Rank: 5Rank: 5
来 自:太平洋
等 级:职业侠客
帖 子:220
专家分:310
注 册:2012-6-30
得分:0 
效率也就是运行所花的时间吧,不如这样吧,加个#include<time.h>
clock_t start,finish;
    double duration;
    start=clock();//排序之前记录
          ……
    //这里就是排序过程语句
          ……
    finish=clock();//排序之后记录
    duration=(double)(finish-start)/CLOCKS_PER_SEC;
    printf( "%f seconds\n", duration ); //打印花费的时间
OK   !!

从来都是无所谓,现在也该学着有所谓。✿咱们一个人,别坐井观天❀
2012-07-26 16:57



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-373788-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.135509 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved