Averages/Median: Difference between revisions

Content added Content deleted
(→‎{{header|Erlang}}: remove unused code)
Line 1,301: Line 1,301:


qs_median([]) -> error;
qs_median([]) -> error;

qs_median([P|List]) ->
qs_median([P|List]) ->
TargetPos = length(List)/2 + 0.5,
TargetPos = length(List)/2 + 0.5,
qs_median(List, TargetPos, P, undefined).
qs_median(List, TargetPos, P, undefined).

qs_median([X], _, _, _) -> X;
qs_median([X], _, _, _) -> X;
qs_median([X,Y], 1.5, _, _) -> (X+Y)/2;
qs_median([X,Y], 1.5, _, _) -> (X+Y)/2;
Line 1,316: Line 1,316:
true -> P;
true -> P;
false ->
false ->
case (LS + 1.5) == TargetPos of
case LS + 1 > TargetPos of
true ->
true -> qs_median(Smaller,TargetPos, P, undefined);
false ->
Larger = [X || X <- Tail, X >= P],
Larger = [X || X <- Tail, X >= P],
(P + qs_median(Larger, 1, P, up))/2;
qs_median(Larger, TargetPos - LS - 1, P, up)
false ->
case (LS + 0.5) == TargetPos of
true -> (P + qs_median(Smaller,TargetPos - 0.5, P,undefined))/2;
false ->
case LS + 1 > TargetPos of
true -> qs_median(Smaller,TargetPos, P, undefined);
false ->
Larger = [X || X <- Tail, X >= P],
qs_median(Larger, TargetPos - LS - 1, P, up)
end
end
end
end
end.
end.