大家好,这是我在这里的第一个问题。我是数据结构和算法的新手,我的老师让我比较不同算法的时间复杂度,包括:合并排序,堆排序,插入排序和快速排序。我通过互联网搜索并发现快速排序是最快的,但我的快速排序版本是最慢的(它在近1秒内排序100个随机整数,而我的其他排序算法花了将近0秒)。我多次调整我的快速排序逻辑(将第一个值作为支点而不是尝试将中间值作为支点但是徒劳)我最终通过互联网搜索代码,我的代码和代码在互联网上没有太大区别。现在我真的很困惑,如果这是快速排序的行为是自然的(我的意思是你的逻辑是什么,你会得到相同的结果。)或者有一些特定情况你应该使用快速排序。最后我知道我的问题不明确(我不知道怎么问,除了我的英语也不是很好。)我希望有人可以帮助我,我真的想附上我所拥有的尴尬结果的图片,但我可以't(声誉< 10)。
答案 0 :(得分:0)
理论上,quicksort应该是最快的排序算法,运行时为O(nlogn)。最糟糕的情况是O(n ^ 2),但只有在重复值等于枢轴时才会发生。 在您的情况下,我只能假设您的数据透视值在数据数组中不理想,但仍然可以使用该数据透视表对值进行排序。否则,您的快速排序实施不幸是错误的。
答案 1 :(得分:0)
Quicksort具有O(n ^ 2)最坏情况运行时和O(nlogn)平均情况运行时。与大多数其他O(nlogn)算法(如Heapsort)相比,Quicksort在实践中如此快速的一个很好的原因是因为它相对缓存效率很高。它的运行时间实际上是O(n / Blog(n / B)),其中B是块大小。另一方面,Heapsort没有任何这样的加速:它根本没有有效地访问内存缓存。
您选择作为枢轴的值可能不合适,因此您的排序可能需要一些时间。您可以完全避免使用快速排序的最坏情况运行时间O(n ^ 2)几乎适当选择枢轴 - 例如随机选择它。
此外,最佳和最差的情况通常是极端很少发生在实践中。但是任何平均情况分析都假设一些输入分布。对于排序,典型的选择是随机置换模型(如维基百科所假设的)。