erlang 如何按升序或降序对列表进行排序?

5w9g7ksd  于 2022-12-08  发布在  Erlang
关注(0)|答案(2)|浏览(209)

是否有一种方法可以按升序或降序对列表中的所有元素进行排序?

> List1 = [4,3,2,6,1,5].
> sort(List1) == [1,2,3,4,5,6]
> true
aydmsdu9

aydmsdu91#

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

lists:sort(ListToSort).

将返回一个按升序排序的整数列表。感谢@Dogbert指出了显而易见的问题。

pbossiut

pbossiut2#

我们有很多排序的方法,所以有时候你可以自己做。这是我学习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}.

相关问题