Averages/Median: Difference between revisions

no edit summary
(add lambdatalk task)
No edit summary
Line 1,350:
[3, 2, 6, 3, 2] => 3
[6, 4, 2, 3, 1, 3] => 3.0
</pre>
 
=={{header|EMal}}==
<syntaxhighlight lang="emal">
fun median = real by some real values
fun swap = void by int a, int b
real t = values[a]
values[a] = values[b]
values[b] = t
end
fun select = real by int k
int left = 0
int right = values.length - 1
while left < right
real pivot = values[k]
swap(k, right)
int pos = left
for int i = left; i < right; i++
if values[i] < pivot
swap(i, pos)
++pos
end
end
swap(right, pos)
if pos == k do break end
if pos < k do left = pos + 1
else do right = pos - 1 end
end
return values[k]
end
int halfLength = values.length / 2
return when(values.length % 2 == 0,
(select(halfLength) + select(halfLength - 1)) / 2.0,
select(halfLength))
end
writeLine(median(4.1, 5.6, 7.2, 1.7, 9.3, 4.4, 3.2, 5.0))
</syntaxhighlight>
{{out}}
<pre>
4.7
</pre>
 
224

edits