我正在使用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