我现在正在修改排序算法。这是一个问题:
给出这个排序算法用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),但我不知道如何解释结果,我不能只说哦,因为它的非稳定和快速排序在逆序中有不好的结果,所以我可以确定它的快速排序。
我可以从结果中找出具体的信息吗?如果有数学计算或结果中的其他重要观察结果,那就太好了。
答案 0 :(得分:2)
我们可以知道这不是像选择排序或插入排序那样的二次时间算法,因为将输入大小提高10倍会使运行时间增加13-19倍。这是我们从O(n*log(n))
平均案例算法中得到的行为,例如mergesort或一个好的快速排序。
我们可以说这个算法不是自适应的,或者至少不是非常自适应的。自适应算法在分类输入上的表现要好得多,也可能在反向输入上表现得更好。特别是,将排序输入的大小提高10倍会使运行时间提高约10倍。虽然算法确实在排序或反向排序的输入上比随机输入更好,但这看起来更像是一个结果例如,在这些情况下更有效的分支预测。
我们没有任何信息可以表明排序是否稳定。
我没有看到任何可以区分这是快速排序,合并排序,堆包装还是其他O(n*log(n))
算法的内容。我们可以为快速排序排除某些类型的枢轴选择 - 例如,总是选择第一个元素的快速排序,因为枢轴将在排序输入的二次时间内运行 - 但除此之外,我无法说明。