【问题标题】:What different sorting algorithms are available in Java 6?Java 6 中有哪些不同的排序算法?
【发布时间】:2011-10-12 17:14:51
【问题描述】:

计算机科学教科书中经常讨论的几种排序算法,如插入排序、选择排序、冒泡排序等。给定一个整数或对象数组,是否有内置的 Java 6 语言 API 让我可以选择应用特定的排序算法对数组进行排序,而不是重新发明这些轮子?如果没有内置到 Java 6 中,是否有提供此功能的开源库?它们是什么?

【问题讨论】:

  • 请注意,这在 Java 7 中有所不同 - 请参阅 stackoverflow.com/questions/4018332/…
  • @amc,您有 48 个问题没有被接受的答案。也许您可以跟进答案,以便他们可以被接受。

标签: java algorithm sorting


【解决方案1】:

Arrays.sort() 方法在所有原始类型数组中使用快速排序。

排序算法是经过调整的快速排序,改编自 Jon L. Bentley 和 M. Douglas McIlroy 的“Engineering a Sort Function”,Software-Practice and Experience,Vol. 23(11) P. 1249-1265(1993 年 11 月)。该算法在许多数据集上提供 n*log(n) 性能,导致其他快速排序降低到二次性能。

Collections.sort() 方法使用归并排序。这种排序也用于Arrays.sort(Object[])Arrays.sort(T[], Comparator<? super T>)

排序算法是一种改进的归并排序(如果低位子列表中的最高元素小于高位子列表中的最低元素,则忽略合并)。该算法提供有保证的 n log(n) 性能。这个实现将指定的列表转储到一个数组中,对数组进行排序,并遍历列表,从数组中的相应位置重置每个元素。这避免了尝试对链表进行就地排序而导致的 n2 log(n) 性能。

【讨论】:

  • 请注意,Arrays.sort(Object[]) 也使用合并排序。如果您可以在某个地方将其压缩在您的答案中,我可以删除我的。
【解决方案2】:

Arrays.sort(int[] a) 使用经过调整的快速排序。

Arrays.sort[Object[] a) 使用修改后的归并排序。

【讨论】:

    【解决方案3】:

    您通常无法选择(无论如何,使用内置排序)。 Collections 类提供了一个 sort 方法,该方法对于大多数需求来说应该足够高效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-08-06
      • 2016-09-17
      • 1970-01-01
      • 2021-09-28
      • 1970-01-01
      • 2015-05-22
      • 1970-01-01
      相关资源
      最近更新 更多