繁体   English   中英

根据结果​​确定排序算法

[英]Determine sorting algorithm from results

我现在正在修改排序算法。 这是问题:

假定此排序算法是用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) ,但是我不知道如何从结果中进行解释,我不能只说哦,因为它不-稳定和快速排序的顺序相反,结果不好,因此我可以确定它是快速排序的。

我可以从结果中看出什么具体信息吗? 如果结果中包含数学计算或其他重要观察结果,那将是很好的。

我们可以说这不是像选择排序或插入排序这样的二次时间算法,因为将输入大小增加10倍将运行时间增加13-19倍。 这是我们期望的O(n*log(n))平均情况算法的行为,例如mergesort或良好的quicksort。

我们可以说该算法不是自适应的,或者至少不是很自适应的。 自适应算法在分类的输入上可能执行得更好,并且在反向输入上也可能执行得更好。 特别是,将排序的输入的大小增加10倍将使运行时间增加大约10倍。虽然该算法在排序或反向排序的输入上比随机输入做得更好,但看起来更像是结果在这些情况下更有效的分支预测。

我们没有任何信息可以表明排序是否稳定。

我看不出有什么可以区分这是快速排序,合并排序,堆排序还是其他O(n*log(n))算法。 我们可以排除某些类型的枢轴选择来进行快速排序-例如,由于枢轴将在排序后的输入上以二次时间运行,因此快速排序始终选择第一个元素,但我无法分辨。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM