只是一个普遍的问题。我已经看到Arrays.sort()被用于排序数组,其中包含术语"作弊"经常在事后出现。为什么Arrays.sort()被认为是作弊,是否比使用某种排序算法效率更高或更低?
答案 0 :(得分:6)
大多数语言提供的排序实现非常好。我对大多数情况都有疑问 - 除非你对可能帮助你排序的数据类型有额外的了解 - 你将能够击败它。
但是,使用它们并不能为您提供有关它们如何工作的“知识”。如果您的目标是完成工作或提供生产就绪代码,请使用预先构建的方法。如果您的目标是获取知识或展示知识,请编写自己的知识。
如果要求您在面试或作业中对某些内容进行排序,请与面试官/老师保持一致:“您是否希望我自己实施排序,或使用预先建立的排序功能?”如果你不问,你可以在任何一种方式停靠。一些面试官或老师可能会想“哦,她不知道如何实现自己的排序”,其他人可能会想“为什么她不使用那种语言的一部分?”
答案 1 :(得分:3)
“作弊”?只有当你的家庭作业要求你对一个系列进行排序并且你的老师意味着你自己实施时才使用Arrays.sort
。
除此之外,Arrays.sort
通常是对您的收藏品进行排序的最佳方式。
答案 2 :(得分:2)
sort()方法的效率取决于所实现算法的效率。根据Java文档
排序算法是Vladimir Yaroslavskiy,Jon Bentley和Joshua Bloch的Dual-Pivot Quicksort。该算法在许多数据集上提供O(n log(n))性能,导致其他快速降序降级为二次性能,并且通常比传统(单枢轴)Quicksort实现更快
这是一种快速而稳定的算法。
我认为作弊部分是在练习中有人可能更喜欢使用Array.sort()方法而不是开发排序算法,这非常糟糕......所以我们不要责怪Array.sort( ): - )
答案 3 :(得分:2)
您的问题有点模糊,但您可能想知道的是排序算法如何比较。 @Ashot提到Arrays.sort
使用Dual-Pivot Quicksort算法。 Quicksort就像它的名字,它很快。
但是看看这篇比较排序算法的维基百科文章: Sorting algorithm
如果您认真考虑提高性能,那么您需要更加熟悉不同的排序算法以及为什么可能使用它们的原因。根据您的应用,您可以选择某种算法 - 没有一种好的算法。
答案 4 :(得分:1)
不,这不是作弊。也许有人在找你告诉你知道如何在测试或面试中进行排序,但是要利用那里的JDK方法。使用的算法(我上次检查过)是Timsort。如果存在对您的案例更优化的排序算法,则使用该算法。否则,不要重写你不需要的东西。
答案 5 :(得分:1)
因为如果你的老师告诉你排序和数组并按照这种方式对它进行排序,那么这不是他想要你做的。他可能希望你自己实现说堆排序或快速排序。但在现实世界中,使用此方法对数组进行排序完全不是作弊。
答案 6 :(得分:1)
我只会在面试或家庭作业中考虑作弊,其中的任务是编写排序算法,而你会使用Arrays.sort()。