按字母顺序对字符串排序

时间:2019-10-16 10:26:47

标签: string sorting haskell

我必须编写一个函数

sort3 :: String -> String -> String -> (String, String, String)

按功能(<=)排序(也可以使用min或max)

例如:

sort3 "Is" "This" "Food"
("Food", "Is", "This")

sort3 "Car" "45" "Table"
("45","Car","Table")

1 个答案:

答案 0 :(得分:2)

在对三个字符串 a b c 进行排序时,可以通过六种方式对字符串进行排序:

  1. (a,b,c);
  2. (a,c,b);
  3. (b,a,c);
  4. (b,c,a);
  5. (c,a,b);和
  6. (c,b,a)

在这些答案中,关系 e 1 ≤e 2 ≤e 3 应该成立,其中< em> e i 元组中第 i 个元素。

因此,这意味着您可以通过以下方式实现该功能:

sort3 :: Ord a => a -> a -> a -> (a, a, a)
sort3 a b c | … <= … && … <= … = (…, …, …)
            | … <= … && … <= … = (…, …, …)
            | ⋮

作为示例,我在这里演示如何实现sort2。我将sort3留作练习:

sort2 :: Ord a => a -> a -> (a, a)
sort2 a b | a <= b = (a, b)
          | otherwise = (b, a)

请注意,在实现sort2时可以使用sort3。确实,您可以利用三个sort2调用来正确地对三元组进行排序。但是,这是一种稍微更先进的方法。我建议您首先打算在没有sort3的情况下实现sort2,然后在sort2方面实现它。

相关问题