【发布时间】:2020-12-11 15:51:29
【问题描述】:
Max(A, i, j) 是一个在数组 A 中从 i 到 j 索引的元素中找到最大值的过程。 Min(A, i, j) 是一个在数组 A 中从 i 到 j 索引的元素中找到最小值的过程。 Swap(A, i, j) 是在数组 A 上交换 A[i] 和 A[j] 的过程。
Min(A, i, j) 和 Max(A, i, j) 的时间复杂度为 O(K),其中 K = j - i。 Swap(A, i, j)的时间复杂度是O(1)。
注意:这不是作业问题,因为我是一名在职专业人士,但我即将参加硕士入学考试,这是前一年的问题之一。 我可以在 O(n^2) 时间内轻松完成此操作,但我无法在每次迭代时将此问题分成一半大小并使用 Min、Max 和 Swap 构建排序输出以获得 O(n log n) 时间复杂度.无论哪种方式,我认为它都会达到 O(n^2)。
我觉得这个问题关于它想要的时间复杂度是不正确的。
【问题讨论】:
-
如果是作业,您可能需要在问题中提及,并说出您需要什么样的帮助。帮别人做作业很好,做别人的作业是另一回事。
-
提示:表明你可以通过组合这些操作在 O(1) 中比较两个元素 A[i] 和 A[j]。
-
@Henry, int minIndex = Min(A, i, j); int maxIndex = Max(A, i, j); if( minIndex > maxIndex ) Swap(A, minIndex, maxIndex);
-
@n.'pronouns'm.,这不是作业问题,因为我是一名在职专业人士,但我即将参加硕士入学考试,这是前一年的问题之一。
-
在这里,这可能会对您有所帮助。只需将 k 替换为 0 和 j-i,即该算法使用快速选择,快速排序的一种变体。 geeksforgeeks.org/…
标签: arrays algorithm sorting max min