面试问题 - 以下哪一项最适合对1000个INTEGERS数组进行排序。 1.快速排序 2.Tim排序 3.合并排序 4.数排序。
我选择了快速排序,但我猜错了。任何人都能说出正确答案是什么以及如何解决?
答案 0 :(得分:1)
如果您正在寻找最快的,Merge Sort。
答案 1 :(得分:1)
对于1000
整数,空间复杂度无关紧要,因此mergesort
是最好的,因为它给出了O(nlogn)
而快速排序给出了最坏情况O(n^2)
。计数排序假定整数在特定范围内,而在您的问题中并非如此。我可能会因为输入的大小和编码的简易性而引用bubble sort
。
答案 2 :(得分:0)
Timsort通常是最好的算法。它使用启发式来决定应该使用哪种排序算法(合并或插入排序)。如果最大值和最小值之间的差异很小,则只计算排序将是一个不错的选择。在某些情况下,Quicksort可以是O(n ^ 2)。
最糟糕的情况是Timsort是O(n log n),但最好的情况是O(n)。
答案 3 :(得分:0)
根据Timsort的Wikipedia条目,它将成为真实世界数据的“最佳”。
我试图在这里复制表格,但我的foo缺乏。
下表比较了timsort与其他比较分类的时间复杂度。
Timsort Merge Quicksort Insertion Selection Smoothsort Best case O(n) O(n log n) O(n log n) O(n) O(n^2) O(n) Average case O(n log n) O(n log n) O(n log n) O(n^2) O(n^2) O(n log n) Worst case O(n log n) O(n log n) O(n^2) O(n^2) O (n^2) O(n log n)
Where O is theta.
我不知道counting sort如何比较。