Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting 如何将合并列表按升序排序?_Sorting_Haskell - Fatal编程技术网

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'