【发布时间】:2021-09-28 23:56:58
【问题描述】:
我必须在部分排序的数组中找到(或至少计数)所有对(不一定相邻)未排序的元素。
如果我们假设排序为升序,则数组[1 4 3 2 5] 具有以下未排序的对:(4, 3)、(3, 2) 和(4, 2)。
我正在考虑一种沿插入排序方式工作的算法,因为插入排序倾向于将每个新元素与相对于新元素放错位置的所有元素进行比较。
编辑:在发布问题时,我没有意识到找到这些对比计算它们的时间复杂度更高。是否有更好的算法来计算存在多少这样的对?
【问题讨论】:
-
这可以在 O(nlogn) 中完成,想想二叉搜索树。
-
@SomeDude 如果输入(几乎)按降序排序,则需要报告 O(n^2) 对。
-
@Thomas 我正在考虑将它们插入二叉搜索树中,每当您在左子节点上插入时,在遍历时更新每个节点的“左”插入数。你会得到结果。在数组的降序输入中,所有插入都将在左侧。
-
@SomeDude 但是由于您必须创建一个包含 O(n^2) 项的返回值,因此您的算法无法在 O(nlogn) 中运行。
-
我想的是“计数”而不是列表,那么它是有道理的。