Java 排序算法的实现

Java 排序算法的实现,java,algorithm,sorting,quicksort,mergesort,Java,Algorithm,Sorting,Quicksort,Mergesort,第一次发帖,对不起,如果我违反了任何礼节。 我正在为我的数据结构和算法进行期中学习,我有一个我不太理解的实践问题 假设给您一个N个元素的排序列表 然后是f(N)随机排列的元素 如果f(N)=O(1),您将如何对整个列表进行排序 如果出现以下情况,您将如何对整个列表进行排序 f(N)=O(对数N) 我们已经学习了很多排序算法,但是考试的重点是插入、快速和合并排序。我真的不明白如果F(N)=O(logn)是什么意思。就是用大oh符号来表示,在每种情况下,末端的大部分随机元素要么是常数,要么是对数(N

第一次发帖,对不起,如果我违反了任何礼节。 我正在为我的数据结构和算法进行期中学习,我有一个我不太理解的实践问题

假设给您一个N个元素的排序列表 然后是f(N)随机排列的元素

如果f(N)=O(1),您将如何对整个列表进行排序

如果出现以下情况,您将如何对整个列表进行排序 f(N)=O(对数N)

我们已经学习了很多排序算法,但是考试的重点是插入、快速和合并排序。我真的不明白如果F(N)=O(logn)是什么意思。就是用大oh符号来表示,在每种情况下,末端的大部分随机元素要么是常数,要么是对数(N)

谢谢你的洞察力


编辑:修复了我在大Oh表示法方面的明显错误,但不确定从这里走到哪里。

在第一个示例中,您遇到了一个问题,在这个问题中,非有序元素的数量恒定,遵循排序序列。本质上,这意味着您可以实现一个算法来插入一个非有序元素,然后重复多次。插入所有f(N)=O(1)元素的总体复杂性将是相同的。您提到的其中一个算法最好执行此操作


在第二种情况下,要插入的元素数按log(n)的顺序排列。在这种情况下,您不能忽略此数字,因为它取决于输入大小。因此,您需要想出一种更聪明的方法,将其与已排序的剩余部分合并。(提示:可能您需要执行的操作将帮助您选择算法?

O(1)与1不同。它是任意数量的元素。类似于O(logN)。@MarkoTopolnik那么多对我来说应该是显而易见的,我只是不明白Oh符号有多大适合这个问题。好吧,它正好适合你需要了解你有多少未排序的元素。你要么有O(1)要么有O(logN)这样的元素。@MarkoTopolnik我现在明白了,我想我没有考虑算法设计是一个错误,而更多的是一个奇怪的特殊情况。假设你知道在一个排序列表的末尾有一个固定数量的元素,你会想设计一个排序来利用这个预排序的数据,我的想法是mergesort。我很确定f(N)意味着查找元素的功能。因此,您应该了解合并/快速排序是如何工作的,然后应用它们在查找需求方面的局限性/优点-这将决定哪些适合每种情况。因此,合并排序可能是您在第一个示例中暗示的,因为问题实际上是合并。对于第二种情况,很明显,未排序的部分相对于N来说会很小,但我不知道设计的结果会是什么。“实际上,第一种更像是插入,而第二种更像是合并。”