【发布时间】:2014-10-06 05:26:55
【问题描述】:
我正在使用 2 个辅助函数进行“合并排序”。第一个辅助函数将列表拆分为列表元组,将奇数和偶数索引放在单独的列表中。
Example: [1,2,3,4,5,6]
Returns: ([1,3,5],[2,4,6])
第二个辅助函数假定列表已排序并合并它们。
我将使用这两个函数来实现一个未排序列表的合并排序。
我有这个非常低效的片段,它基本上拆分 (length - 1) * 2 次并合并列表 (length - 1) 次。
sort length (z:zs)
| length == 0 = (z:zs)
| otherwise = sort (length - 1) (merge (fst (split(z:zs))) (snd (split(z:zs)))
我调用 split 两次以获得与第一次拆分相同的信息,但我递归的不够远(每个列表只是一个单例,然后将它们全部合并)。
如何递归到单例情况并同时提取元组的两个元素?
提前感谢您提供的任何帮助。
【问题讨论】:
-
看看
where或let结构。使用类似where (first, second) = split ...的东西。此外,您可以使用all@(x:xs)这样的构造将变量绑定到整个列表。 -
length参数有什么作用? -
如果您有不同的问题,请将其作为新问题发布,不要只是将其添加到现有问题中。
-
哦!谢谢,这是有道理的。对不起,我是堆栈溢出的新手。我会记住这一点的。
-
你真的需要你的长度参数或者你可以通过其他方式检测单例情况吗?