Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Arrays.sort()与排序算法_Java_Arrays_Algorithm_Sorting - Fatal编程技术网

Java Arrays.sort()与排序算法

Java Arrays.sort()与排序算法,java,arrays,algorithm,sorting,Java,Arrays,Algorithm,Sorting,只是一个一般性的问题。我见过Arrays.sort()用于排序数组,后面经常出现“作弊”一词。为什么Arrays.sort()被认为是作弊,它比使用某种排序算法效率高还是低?不,它不是作弊。也许有人在找你,让你知道如何在测试或面试中进行排序,但要利用JDK方法。所使用的算法(上次我检查时)是一个。如果有一种排序算法更适合您的情况,那么使用该算法。否则,不要重写你不需要的内容。“作弊”?只有当你的家庭作业要求你对一个集合进行排序,并且你使用array.Sort,而你的老师要求你实现自己的集合时 除

只是一个一般性的问题。我见过Arrays.sort()用于排序数组,后面经常出现“作弊”一词。为什么Arrays.sort()被认为是作弊,它比使用某种排序算法效率高还是低?

不,它不是作弊。也许有人在找你,让你知道如何在测试或面试中进行排序,但要利用JDK方法。所使用的算法(上次我检查时)是一个。如果有一种排序算法更适合您的情况,那么使用该算法。否则,不要重写你不需要的内容。

“作弊”?只有当你的家庭作业要求你对一个集合进行排序,并且你使用
array.Sort
,而你的老师要求你实现自己的集合时


除此之外,
Arrays.sort
通常是对你的收藏进行排序的最佳方式。

因为如果你的老师告诉你排序和排列,而你是这样排序的,这不是他想要你做的。他可能希望您自己实现堆排序或快速排序。但在现实世界中,使用这种方法对数组进行排序根本不是欺骗

大多数语言提供的排序实现都非常好。我怀疑在大多数情况下——除非您对可能帮助您排序的数据类型有额外的了解——您是否能够战胜它

然而,使用它们并不能为您提供关于它们如何工作的“知识”。如果您的目标是完成工作,或者提供产品代码,请使用预构建的方法。如果你的目标是获得知识或展示知识,写下你自己的


如果你在面试或作业中被要求对某件事进行排序,请与面试官/老师非常清楚:“你想让我自己进行排序,还是使用预先构建的排序功能?”如果你不问,你可以采用任何一种方式。一些面试官或老师可能会想“哦,她不知道如何实现自己的排序”,而另一些人可能会想“她为什么不使用语言中的排序?”

我只会在面试或家庭作业中被视为作弊,任务是编写排序算法,而你会使用数组。sort()相反。

sort()方法的效率取决于所实现算法的效率

排序算法是Vladimir Yaroslavskiy、Jon Bentley和Joshua Bloch提出的双枢轴快速排序算法。该算法在许多数据集上提供了O(n log(n))性能,导致其他快速排序降级为二次性能,并且通常比传统(单枢轴)快速排序实现更快

这是一个快速稳定的算法


我认为作弊的部分是,在一个练习中,有人可能更喜欢使用Array.sort()方法,而不是开发排序算法,这真的很糟糕……所以我们不要把责任推到Array.sort():-)

你的问题有点模糊,但也许你想知道的是排序算法是如何比较的@Ashot提到,
Arrays.sort
使用双枢轴快速排序算法。快速排序就像它的名字一样,它很快。

但看看这篇比较排序算法的维基百科文章:


如果您真的想提高性能,那么您需要更加熟悉不同的排序算法,以及为什么可能会使用每种算法。根据您的应用程序,您可以选择特定的算法-没有一个好的算法。

Arrays.sort()
使用
双枢轴快速排序
算法。Javadoc声明它是一个经过调优的快速排序。不同版本的JDK的具体情况可能有所不同-是的,我想知道它是否比手动编码其他算法有性能优势,或者只是因为codeHi@Schonge的工作更少,也不那么麻烦。实际上,如果您确实需要提高性能,您可能需要编写自己的算法。我以前编写过我自己的合并排序(和其他——我忘了)算法;唯一的问题是,你必须仔细阅读这些算法,并理解它们为什么会被使用。一本好的算法书也会有帮助。大约两年前,我在大学里做了一个关于数据结构和算法的模块。现在是我的最后一年了,所以在夏天去面试之前,我要重新温习一下。了解人们对array.sort()的看法很有趣。我一直认为使用它是不可取的。显然,在学习时不应该使用它,但有这些选项是很好的。我个人喜欢编写自己的东西,即使是重新发明轮子,我也会从中获得更多的满足感。