列表Erlang中的元素排序

时间:2017-11-19 21:39:35

标签: list sorting erlang

有没有办法按升序或降序对列表中的所有元素进行排序?

例如,List1创建如下:

  

List1 = [4,3,2,6,1,5]。

我需要此输出 - > List2 = sort(List1)。

  

List2 == [1,2,3,4,5,6]

     

2 个答案:

答案 0 :(得分:4)

lists:sort([2,3,6,5,1,7,13,4]).

lists:sort(ListToSort).

将以升序返回整数的排序列表。感谢@Dogbert指出了明显的问题。

答案 1 :(得分:3)

我们有很多方法可以排序,所以有时你可以自己做。这是我学习Erlang的方式:)

-spec sort(List) -> SortedList when
  List :: [integer()],
  SortedList :: [integer()].
sort([Pivot | Tail]) ->
{Smaller, Larger} = partition(Pivot, Tail, [], []),
sort(Smaller) ++ [Pivot] ++ sort(Larger);
sort([]) -> [].

partition(Check, [Head | Tail], Smaller, Larger) ->
    case Head =< Check of
        true -> partition(Check, Tail, [Head | Smaller], Larger);
        false -> partition(Check, Tail, Smaller, [Head | Larger])
    end;
partition(_, [], Smaller, Larger) -> {Smaller, Larger}.