我正在使用2个辅助函数进行“合并排序”。第一个辅助函数将列表拆分成一个列表元组,将奇数和偶数索引放在单独的列表中。Haskell,从列表元组中拉出两个列表
Example: [1,2,3,4,5,6]
Returns: ([1,3,5],[2,4,6])
第二个帮助函数假定列表已排序并合并它们。
我要使用这两个函数实现未排序列表的合并排序。
我有这个非常低效率的片断,基本上分割(长度 - 1)* 2次并合并列表(长度 - 1)次。
sort length (z:zs)
| length == 0 = (z:zs)
| otherwise = sort (length - 1) (merge (fst (split(z:zs))) (snd (split(z:zs)))
我打电话分裂两次,得到这是第一个分割做了同样的信息,我不会递归远远不够(其中每个列表仅仅是一个单,然后将它们合并所有)。
我该如何递归到单例情况并同时拉出元组的两个元素?
非常感谢您提供的任何帮助。
看看'where'或'let'结构。使用'where(first,second)= split ...'之类的东西。另外,你可以使用这样的结构'all @(x:xs)'将变量绑定到整个列表。 – Mark 2014-10-06 05:31:43
'length'参数实现了什么? – 2014-10-06 05:46:17
如果您有其他问题,请将其作为新问题发布,并且不要将其添加到现有问题中。 – Bakuriu 2014-10-06 05:53:33