我被要求提出尽可能多的解决方案来解决以下问题:
编写一个函数,它接受两个数字列表(假设都按升序排列)并将它们合并为一个列表(也按升序排列).
我的第一个解决方案是append list1进入list2然后再进行sort.
然后我发现了一个内置的merge.
然后我决定自己实际实现一个解决方案,并且我想出了一个尾递归函数,目前只适用于列表的子集.
这个问题本身似乎也许我终于有理由阅读Knuth了,但是由于下雪,Uni和图书馆都关闭了.
所以我转向你,对这个问题有什么有趣的,有效的或反模式的方法?
PS我不是在寻找实现,除非这是展示这个想法的最佳方式.我只是想看看人们是如何处理这类问题的.
合并两个排序列表在算法上是微不足道的.
从每个列表的第一个元素开始,比较,写下较低的一个输出,然后在找到下一个列表的位置前进.继续,直到你到达一个列表的末尾,然后推出其他列表的其余部分.
这需要在每个列表和最大值上只有一个循环.每个输出元素一个比较.
编辑:这与两个列表一样高效.当你有大量的列表要合并时,它会变得有点棘手.
小智 6
您可以编写一个函数is-sorted-p来确定列表是否仍按升序排列.然后连接两个列表,并随机地将结果洗牌,直到它通过你的谓词.
......你没有谈论表演.
| 归档时间: |
|
| 查看次数: |
1710 次 |
| 最近记录: |