Sorting 如何将合并列表按升序排序?
我已经完成了这项工作,但现在我需要按升序对它们进行排序。您只需要比较Sorting 如何将合并列表按升序排序?,sorting,haskell,Sorting,Haskell,我已经完成了这项工作,但现在我需要按升序对它们进行排序。您只需要比较x和y,然后决定首先将哪个添加到结果中。请注意,一次只添加一个;x之后的下一个元素可能仍然位于y之前 注意,您需要Ord约束来确保[a]->[a]->[a] 合并xs[]=xs 合并[]ys=ys 合并xs@(x:xs')ys@(y:ys')|x您只需比较x和y,然后决定首先将哪个添加到结果中。请注意,一次只添加一个;x之后的下一个元素可能仍然位于y之前 注意,您需要Ord约束来确保[a]->[a]->[a] 合并xs[]=xs
x
和y
,然后决定首先将哪个添加到结果中。请注意,一次只添加一个;x
之后的下一个元素可能仍然位于y
之前
注意,您需要Ord
约束来确保[a]->[a]->[a]
合并xs[]=xs
合并[]ys=ys
合并xs@(x:xs')ys@(y:ys')|x您只需比较x
和y
,然后决定首先将哪个添加到结果中。请注意,一次只添加一个;x
之后的下一个元素可能仍然位于y
之前
注意,您需要Ord
约束来确保[a]->[a]->[a]
合并xs[]=xs
合并[]ys=ys
合并xs@(x:xs')ys@(y:ys')| x并且源列表已按升序排列?如果您只知道列表是由merge
函数创建的,那么您所能做的就是对列表进行排序。如果您还知道两个初始列表已排序且大小相同,则可以“取消合并”获取两个原始列表的列表,然后使用另一个保持排序的函数再次合并它们。源列表已经按升序排列了吗?如果您所知道的列表是由merge
函数创建的,那么最好只对列表进行排序。如果您还知道两个初始列表已排序且大小相同,则可以“取消合并”列表以恢复两个原始列表,然后使用另一个保持排序的函数再次合并它们。
merge :: [a] -> [a] -> [a]
merge xs [] = xs
merge [] ys = ys
merge (x:xs) (y:ys) = x : y : merge xs ys
merge :: Ord a => [a] -> [a] -> [a]
merge xs [] = xs
merge [] ys = ys
merge xs@(x:xs') ys@(y:ys') | x <= y = x : merge xs' ys
| otherwise = y : merge xs ys'