尽管有array.sort,但排序算法的作用

时间:2015-01-24 18:12:37

标签: java algorithm sorting

  1. 当我们有 array.sort 时,为什么我们需要这么多排序算法来对整数数组进行排序?

  2. 排序与查找数组中的最大数字不同吗?

  3. 哪种排序算法排序最好?

6 个答案:

答案 0 :(得分:3)

  1. 没有排序算法,您无法实现array.sort。这就像是说我们为什么在超市买牛肉时需要一头牛。

  2. 要查找最大值,您无需移动集合的元素。要对它们进行排序,您需要移动它们。

  3. 没有“最佳”排序算法。这完全取决于您的使用案例。

  4. 更多:https://en.wikipedia.org/wiki/Sorting_algorithm

答案 1 :(得分:1)

  

当我们有array.sort已经做同样的事情时,为什么我们需要这么多的排序算法来对整数数组进行排序?

大多数编程语言都在其标准库中附带某种排序算法。大多数情况下,你可以使用这个默认的排序算法,你会没事的。

也就是说,不同的排序算法具有不同的性能特征和不同的权衡。排序算法的大多数库实现使用比较排序,如quicksort,timsort或introsort。这些算法可用于对可以相互比较的任何对象进行排序,因此它们是良好的通用排序。对于某些情况 - 例如排序整数 - 有专门的算法可以利用您对整数数据进行排序的事实。例如,如果您对包含大量小数字的数组进行排序,则在理论上和实践中使用计数排序或基数排序可能比快速排序更快。

还有其他考虑因素需要考虑。例如,Quicksort的平均速度很快但是有退化的情况。您可能拥有绝对无法遇到这些情况的应用程序,在这种情况下使用自定义排序算法可能是合适的。

  

排序和查找数组中最大的数字是不同的?我的意思是,如果一个阵列被明确排序,那么最大的数字将最终结束

是的,这些是不同的问题。您可以通过简单记录到目前为止看到的最大值,在阵列的一次传递中找到数组中最大的元素。这需要时间O(n),使用空间O(1),并且非常有效。排序算法需要花费更多的时间和精力,因为他们还必须找到第二个 - 最大元素,第三个​​ - 最大元素等。在这个意义上,排序从根本上来说是一个更难的"问题比找到数组的最大元素的问题。

  

这是排序数组的最佳排序算法吗?

正如我前面所提到的那样,没有一个人能够做到最好的"算法对数组进行排序。这取决于许多因素,例如阵列中存储了哪些元素,这些元素的分布是什么,是否需要最坏情况或平均情况效率,要使用多少内存等等。在软件工程的大多数方面,有许多不同的权衡要做,你可以自己选择你认为最好的那个。

希望这有帮助!

答案 2 :(得分:1)

  

当我们有array.sort时,为什么我们需要这么多的排序算法来对整数数组进行排序?

每种排序算法都有其优点和缺点,其在时间和空间方面的效率将根据具体情况而有所不同。

我建议你看看Big-O Cheat sheet,它会为你提供每种排序算法效率的摘要(如果你不了解它们,还会链接到这些算法)。

enter image description here

您的示例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)

  1. 不同的问题需要不同的解决方案。这取决于数组的性质,以排序哪种算法最适合工作。
  2. 查找最大数字只需要一次遍历数组,这比任何真正的排序算法都能提供的效率更高。
  3. 见1.

答案 5 :(得分:0)

谢谢所有人回答。 我现在明白,array.sort也使用其中一种排序方法,并且没有“最佳”排序方法,它取决于上下文。