【发布时间】:2018-06-23 14:33:33
【问题描述】:
问题如下:
由固定数量的小段 n 组成的列表 端到端,每个段已经是升序了。
我考虑过使用合并排序,如果基本情况等于 n,然后返回并合并它们,因为我们已经知道它们是排序的,但是如果我有 3 个段,它就行不通,因为我要除以 2 并且你不能将 3 个片段平均分成两部分。
另一种类似于归并排序的方法。所以我为每个段使用 n 个堆栈,我们可以识别 L[i] > L[i+1] 因为段是升序的。但是我需要 n 个比较来确定哪个元素先出现,而且我不知道在不使用另一个数据结构比较堆栈顶部的元素的情况下动态比较 n 个元素的有效方法。 此外,您应该使用问题特征(已排序的段)来获得比传统算法更好的结果。即复杂度小于 O(nlogn)。
如果你有一个想法,一个伪代码会很好。
编辑:
一个例子是 [(14,20,22),(7,8,9),(1,2,3)] 这里我们有 3 个元素的 3 个段,即使这些段是排序的,整个列表不是。
附言() 是否只指出片段
【问题讨论】:
-
问题到底是什么?你写的没有意义。为什么要对已经排序的列表进行排序?
-
@ichantz 添加了编辑
-
所以你只需要在内部对每个segment-sublists进行排序?
-
@ichantz 确实,这就是我们的目标
-
运行
for循环,使用sort()方法对每个段进行排序。您使用什么语言? Java 为集合内置了排序方法。