【发布时间】:2011-08-04 19:06:54
【问题描述】:
我正在学习 Erlang 并决定在其中实现冒泡排序,我花了一些功夫,结果我成功了,但我发现我的思维方式不正确,有没有更有效的方法来实现它或不是吗?
bubble_sort(L) ->
if
length(L) > 1 ->
SL=bubble_sort_p(L),
bubble_sort(lists:sublist(SL,1,length(SL)-1)) ++ [lists:last(SL)];
true -> L
end.
bubble_sort_p([]) -> [];
bubble_sort_p([F | R]) ->
case length(R) > 0 of
true -> case F > hd(R) of
true -> [hd(R)] ++ bubble_sort_p([F|tl(R)]);
false -> [F] ++ bubble_sort_p([hd(R)|tl(R)])
end;
false -> [F]
end.
【问题讨论】:
-
...提交了一个不完整的问题
-
对不起,我不小心提交了,现在更正
-
您的
if length(L) > 1会破坏性能。它必须遍历整个列表。你最好在空列表上进行模式匹配,然后单独处理它。在函数式语言中,合并排序通常是一个更好的主意。它速度更快,并且可以轻松地以稳定/流畅的方式编写,但它比您这里的要快得多。
标签: erlang bubble-sort