当我们有 array.sort 时,为什么我们需要这么多排序算法来对整数数组进行排序?
排序与查找数组中的最大数字不同吗?
哪种排序算法排序最好?
答案 0 :(得分:3)
没有排序算法,您无法实现array.sort。这就像是说我们为什么在超市买牛肉时需要一头牛。
要查找最大值,您无需移动集合的元素。要对它们进行排序,您需要移动它们。
没有“最佳”排序算法。这完全取决于您的使用案例。
答案 1 :(得分:1)
当我们有array.sort已经做同样的事情时,为什么我们需要这么多的排序算法来对整数数组进行排序?
大多数编程语言都在其标准库中附带某种排序算法。大多数情况下,你可以使用这个默认的排序算法,你会没事的。
也就是说,不同的排序算法具有不同的性能特征和不同的权衡。排序算法的大多数库实现使用比较排序,如quicksort,timsort或introsort。这些算法可用于对可以相互比较的任何对象进行排序,因此它们是良好的通用排序。对于某些情况 - 例如排序整数 - 有专门的算法可以利用您对整数数据进行排序的事实。例如,如果您对包含大量小数字的数组进行排序,则在理论上和实践中使用计数排序或基数排序可能比快速排序更快。
还有其他考虑因素需要考虑。例如,Quicksort的平均速度很快但是有退化的情况。您可能拥有绝对无法遇到这些情况的应用程序,在这种情况下使用自定义排序算法可能是合适的。
排序和查找数组中最大的数字是不同的?我的意思是,如果一个阵列被明确排序,那么最大的数字将最终结束
是的,这些是不同的问题。您可以通过简单记录到目前为止看到的最大值,在阵列的一次传递中找到数组中最大的元素。这需要时间O(n),使用空间O(1),并且非常有效。排序算法需要花费更多的时间和精力,因为他们还必须找到第二个 - 最大元素,第三个 - 最大元素等。在这个意义上,排序从根本上来说是一个更难的"问题比找到数组的最大元素的问题。
这是排序数组的最佳排序算法吗?
正如我前面所提到的那样,没有一个人能够做到最好的"算法对数组进行排序。这取决于许多因素,例如阵列中存储了哪些元素,这些元素的分布是什么,是否需要最坏情况或平均情况效率,要使用多少内存等等。在软件工程的大多数方面,有许多不同的权衡要做,你可以自己选择你认为最好的那个。
希望这有帮助!
答案 2 :(得分:1)
当我们有array.sort时,为什么我们需要这么多的排序算法来对整数数组进行排序?
每种排序算法都有其优点和缺点,其在时间和空间方面的效率将根据具体情况而有所不同。
我建议你看看Big-O Cheat sheet,它会为你提供每种排序算法效率的摘要(如果你不了解它们,还会链接到这些算法)。
您的示例Arrays.sort()
使用后面的快速排序。在大多数情况下它都相当不错,但在最坏的情况下可能会很糟糕(O(n^2)
)。
排序与查找数组中的最大数字不同吗?
查找最大数字与排序数组不同。如果您的数组已经排序,那么最后一个数字是最大的,这很酷。
但是如果你只需要最好的,你不必重新排列数组并按正确顺序移动所有元素,你可以只读它。读取数组的元素并移动其元素并不具有相同的复杂性!
以下代码搜索最大元素,空间复杂度为O(1)
,时间复杂度为O(n)
。它比排序数组更容易。
int biggest = array[0];
for (int i = 0; i < array.length; i++) {
if (array[i] > biggest) {
biggest = array[i];
}
}
哪种排序算法排序最好?
没有最好的排序算法,这完全取决于上下文。我建议您阅读Sorting Algorithm wikipedia entry并按照链接更好地了解每种排序算法的行为,时间/空间复杂性的重要性......
答案 3 :(得分:0)
1&GT;当我们有array.sort已经做同样的事情时,为什么我们需要这么多的排序算法来对整数数组进行排序...
不同类型的用例使用不同的排序算法。因此对于例如Arrays.sort使用quicksort,而如果数组中的元素数小于7则使用插入排序。
2 - ;排序和查找数组中最大的数字是不同的?我的意思是 如果一个数组显然被排序,那么最大的数字将最终结束
是的,你是对的。对数据进行排序有不同的目的。如果你想要最大的元素,你总是可以用o(n)找到它,而如果你的数据集已经排序,你可以用o(1)找到它。
3&GT;这是排序数组的最佳排序算法吗?
取决于用例和用例。时间/空间等各种因素都会出现。
答案 4 :(得分:0)
答案 5 :(得分:0)
谢谢所有人回答。 我现在明白,array.sort也使用其中一种排序方法,并且没有“最佳”排序方法,它取决于上下文。