首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据结果确定排序算法

根据结果确定排序算法
EN

Stack Overflow用户
提问于 2015-06-12 08:23:50
回答 1查看 428关注 0票数 1

我现在正在修改排序算法。以下是一个问题:

给出了该排序算法用C编写,并将'a‘和'A’视为相等的排序算法,运行该排序算法后,结果如下:

10000随机数据-> 0.016秒

100000随机数据-> 0.304秒

10000有序数据-> 0.006秒

100000有序数据-> 0.108秒

10000反向数据-> 0.010秒

100000反向数据-> 0.138秒

问题:在点形式中,简要说明你可以从上面的测试结果中得出的结论。

我做了什么,

我知道这个排序算法是非稳定的(如问题中所述),我可以猜到它是一个快速排序。我知道快速排序有最坏的情况O(n^2)O(n log n),但是我不知道如何从结果中解释,我不能只是说哦,因为它的不稳定和快速排序有坏的结果逆序,所以我可以确定它是快速排序。

从结果中我能看出什么具体的东西吗?如果有数学计算或其他一些重要的观察结果,那就太好了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-12 08:52:41

我们可以看出,这不是像选择排序或插入排序那样的二次时间算法,因为将输入大小提高10倍会使运行时提高13-19倍。这是我们所期望的O(n*log(n))平均案例算法的行为,比如mergesort或一个好的快速排序算法。

我们可以看出,该算法不是自适应的,或者至少不是非常自适应的。一种自适应算法在排序输入上会表现得更好,而且可能也会在反向输入上表现得更好。特别是,如果将排序输入的大小提高10倍,运行时就会增加大约10倍。虽然该算法在排序或反向排序输入方面比随机输入做得更好,但在这些情况下,这看起来更像是更有效的分支预测的结果。

我们没有任何信息表明这类信息是否稳定。

我看不出有什么能区分这是快速排序、合并、堆排序还是其他O(n*log(n))算法。我们可以排除对快速排序的某些类型的枢轴选择--例如,一个总是选择第一个元素的快速排序,因为支点将在排序输入上在二次时间内运行--但除此之外,我不知道。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30798569

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档