Anonymous user
Averages/Median: Difference between revisions
m
→{{header|Erlang}}
(→{{header|Erlang}}: make quick sort tail recursive) |
|||
Line 1,301:
qs_median([]) -> error;
qs_median([X]) -> X;
qs_median([P|_Tail] = List) ->
TargetPos = length(List)/2 + 0.5,
qs_median(List, TargetPos, P,
qs_median([X], 1
qs_median([X], 1
▲qs_median([P|Tail], TargetPos, LastP, _, Acc) ->
Smaller = [X || X <- Tail, X < P],
LS = length(Smaller),
Line 1,321 ⟶ 1,318:
(P+LastP)/2;
qs_continue(P, LS, TargetPos, _LastP, SM, _TL, _Acc) when TargetPos == LS + 0.5 ->
qs_median(SM, TargetPos - 0.5, P
qs_continue(P, LS, TargetPos, _LastP, SM, _TL, Acc) when LS + 1 > TargetPos
qs_median(SM, TargetPos, P
qs_continue(P, LS, TargetPos, _LastP, _SM, TL, Acc) ->
Larger = [X || X <- TL, X >= P],
Line 1,329 ⟶ 1,326:
case NewPos == 0.5 of
true ->
qs_median(Larger, 1, P
false ->
qs_median(Larger, NewPos, P
end.
|