合并2个排序列表

Pet*_*ton 3 lisp

我被要求提出尽可能多的解决方案来解决以下问题:

编写一个函数,它接受两个数字列表(假设都按升序排列)并将它们合并为一个列表(也按升序排列).

我的第一个解决方案是append list1进入list2然后再进行sort.

然后我发现了一个内置的merge.

然后我决定自己实际实现一个解决方案,并且我想出了一个尾递归函数,目前只适用于列表的子集.

这个问题本身似乎也许我终于有理由阅读Knuth了,但是由于下雪,Uni和图书馆都关闭了.

所以我转向你,对这个问题有什么有趣的,有效的或反模式的方法?


PS我不是在寻找实现,除非这是展示这个想法的最佳方式.我只是想看看人们是如何处理这类问题的.

TTo*_*oni 6

合并两个排序列表在算法上是微不足道的.

从每个列表的第一个元素开始,比较,写下较低的一个输出,然后在找到下一个列表的位置前进.继续,直到你到达一个列表的末尾,然后推出其他列表的其余部分.

这需要在每个列表和最大值上只有一个循环.每个输出元素一个比较.

编辑:这与两个列表一样高效.当你有大量的列表要合并时,它会变得有点棘手.


小智 6

您可以编写一个函数is-sorted-p来确定列表是否仍按升序排列.然后连接两个列表,并随机地将结果洗牌,直到它通过你的谓词.

......你没有谈论表演.

  • Bogosort救援 (4认同)