![]() |
1
2
作为一个起点,我将删除您的特殊情况
这个
最后,不要递归(在这种情况下,这是非常昂贵的,因为您创建的新列表的数量-每个元素一个!)我会在你的
(理想情况下,我将重构此项以对每个列表使用整数索引,而不是使用
|
![]() |
2
14
合并两个排序列表可以在o(n)中完成。
|
![]() |
3
4
我的看法是:
如果我必须用手做,我会做什么。=) |
![]() |
4
3
你真的确定你的代码是有效的吗?如果不测试它,我可以看到以下内容:
|
![]() |
5
2
你也在要求不同的方法。根据使用情况,我可以做如下操作。下面的代码比较懒惰,因此它不会一次对整个列表进行排序,而是只在请求元素时进行排序。
编辑: 这基本上与Sergey Osypchuk相同,他只看排序时从头到尾的意志是最快的,但是由于提前排序整个列表的事实,延迟也会更高。因此,正如我所说的,根据使用情况,我可能会采用这种方法,另一种方法是类似于Sergey Osypchuk的方法。 |
![]() |
6
2
通常可以使用堆栈而不是递归 |
![]() |
7
1
合并列表(理论上,输入列表是预先排序的)排序可以通过以下方式实现:
如果您从未排序的列表开始,则需要使用上面的函数按排序的子序列对其进行拆分,然后将其变为褐色。 |
![]() |
8
0
我从不使用递归进行合并排序。您可以对输入进行迭代传递,利用这样一个事实:排序后的块大小在每次合并传递中都会翻倍。跟踪每个输入列表中的块大小和已处理项目的计数;当它们相等时,列表将耗尽。当两个列表都用尽时,您可以继续下一对块。当块大小大于或等于输入大小时,就完成了。 编辑: 由于我的误解,我之前留下的一些信息是不正确的-C中的列表类似于数组,而不是链接列表。我很抱歉。 |
![]() |
A B · C#Excel自动调整列避免长文本时出错 5 月前 |
![]() |
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 5 月前 |
![]() |
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 5 月前 |
|
Sei · Avalonia/WPF将路由器传递到控制模板 6 月前 |