美文网首页
erlang实现排序

erlang实现排序

作者: 码农工号9527 | 来源:发表于2019-05-29 16:50 被阅读0次
    -module(sort_test).
    -compile(export_all).
    
    % 每次step得到一个最小值,对余下的列表再进行递归调用
    sort([], SortedList) -> SortedList;
    sort(List, SortedList) -> 
        {Min, T} = step(List), 
        sort(T, SortedList ++ [Min]).
     % 将列表的第一个元素作为最小值与列表中的其它元素进行比较
    step([H|T]) -> step(H, T, []).
    step(Min, [], T1) -> {Min, T1};%% 得到最小值
    step(Min, [H|T], T1) ->
         if
           Min < H -> step(Min, T, [H] ++ T1);
           Min >= H -> step(H, T, [Min] ++ T1)
         end.
    
    
    selection([]) -> [];%当输入列表为空
    selection([Item]) -> [Item];
    selection(L) -> selection(L,[]).% -> selection([H|T],R)
    selection([Item],R) -> [Item|R]; %    ->selection([Item])
    selection([H|T],R) -> %%    ->selection([Item],R)
      {C,Rr} = selection_helper(T,H,[]),%调用selection_helper方法,将列表匹配为H开头,T结尾,第三个参数为空列表(将不是最小的值统统塞到这里),然后匹配到左侧,最小值为C,余下还需重新调用selection的列表做循环的是Rr
      selection(Rr,[C|R]).%循环 ->  将Rr放到开头匹配成[H|T],将最小值C放入R列表,匹配成R 
    
    selection_helper([],C,R) -> {C,R};%当列表为空时,外面的值就是最大的,R中的值未排序
    selection_helper([H|T],C,R) when H>C -> selection_helper(T,H,[C|R]);%当[H|T]中的H大于C 那么将H放到外面,C放R头部
    selection_helper([H|T],C,R) when H=<C -> selection_helper(T,C,[H|R]).%当[H|T]中的H小于等于C 那么将C放到外面,H放R头部, 最终保证外面的一定是列表中最大的值
    

    相关文章

      网友评论

          本文标题:erlang实现排序

          本文链接:https://www.haomeiwen.com/subject/zjnytctx.html