Averages/Median: Difference between revisions

m
syntax highlighting fixup automation
No edit summary
m (syntax highlighting fixup automation)
Line 20:
=={{header|11l}}==
{{trans|Python}}
<langsyntaxhighlight lang=11l>F median(aray)
V srtd = sorted(aray)
V alen = srtd.len
Line 26:
 
print(median([4.1, 5.6, 7.2, 1.7, 9.3, 4.4, 3.2]))
print(median([4.1, 7.2, 1.7, 9.3, 4.4, 3.2]))</langsyntaxhighlight>
{{out}}
<pre>
Line 36:
{{libheader|Action! Tool Kit}}
{{libheader|Action! Real Math}}
<langsyntaxhighlight lang=Action!>INCLUDE "H6:REALMATH.ACT"
 
DEFINE PTR="CARD"
Line 103:
Test(a,i)
OD
RETURN</langsyntaxhighlight>
{{out}}
[https://gitlab.com/amarok8bit/action-rosetta-code/-/raw/master/images/Averages_Median.png Screenshot from Atari 8-bit computer]
Line 118:
 
=={{header|Ada}}==
<langsyntaxhighlight lang=ada>with Ada.Text_IO, Ada.Float_Text_IO;
 
procedure FindMedian is
Line 148:
Ada.Float_Text_IO.Put( median_val );
Ada.Text_IO.New_line;
end FindMedian;</langsyntaxhighlight>
 
=={{header|ALGOL 68}}==
{{trans|C}}<langsyntaxhighlight lang=algol68>INT max_elements = 1000000;
# Return the k-th smallest item in array x of length len #
Line 215:
"<: ", whole (less,0), new line,
">: ", whole (more, 0), new line,
"=: ", whole (eq, 0), new line))</langsyntaxhighlight>
Sample output:
<pre>length: 97738
Line 226:
=={{header|AntLang}}==
AntLang has a built-in median function.
<syntaxhighlight lang =AntLang>median[list]</langsyntaxhighlight>
 
=={{header|APL}}==
<langsyntaxhighlight lang=APL>median←{v←⍵[⍋⍵]⋄.5×v[⌈¯1+.5×⍴v]+v[⌊.5×⍴v]} ⍝ Assumes ⎕IO←0</langsyntaxhighlight>
 
First, the input vector ⍵ is sorted with ⍵[⍋⍵] and the result placed in v. If the dimension ⍴v of v is odd, then both ⌈¯1+.5×⍴v and ⌊.5×⍴v give the index of the middle element. If ⍴v is even, ⌈¯1+.5×⍴v and ⌊.5×⍴v give the indices of the two middle-most elements. In either case, the average of the elements at these indices gives the median.
 
Note that the index origin ⎕IO is assumed zero. To set it to zero use: <syntaxhighlight lang =APL>⎕IO←0</langsyntaxhighlight>
 
If you prefer an index origin of 1, use this code instead:
<langsyntaxhighlight lang=APL>
⎕IO←1
median←{v←⍵[⍋⍵] ⋄ 0.5×v[⌈0.5×⍴v]+v[⌊1+0.5×⍴v]}
</syntaxhighlight>
</lang>
 
This code was tested with ngn/apl and Dyalog 12.1. You can try this function online with [http://ngn.github.io/apl/web/index.html#code=median%u2190%7Bv%u2190%u2375%5B%u234B%u2375%5D%u22C4.5%D7v%5B%u2308%AF1+.5%D7%u2374v%5D+v%5B%u230A.5%D7%u2374v%5D%7D ngn/apl]. Note that ngn/apl currently only supports index origin 0. Examples:
Line 276:
=={{header|AppleScript}}==
===By iteration===
<langsyntaxhighlight lang=applescript>set alist to {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0}
set med to medi(alist)
 
Line 319:
return max
end findmax</langsyntaxhighlight>
 
{{output}}
<syntaxhighlight lang =applescript>4.5</langsyntaxhighlight>
 
===Composing functionally===
Line 328:
{{Trans|JavaScript}}
{{Trans|Haskell}}
<langsyntaxhighlight lang=AppleScript>-- MEDIAN ---------------------------------------------------------------------
 
-- median :: [Num] -> Num
Line 433:
missing value
end if
end uncons</langsyntaxhighlight>
{{Out}}
<langsyntaxhighlight lang=AppleScript>{missing value, 4, 3.5, 2.1}</langsyntaxhighlight>
 
----
 
===Quickselect===
<langsyntaxhighlight lang=applescript>-- Return the median value of items l thru r of a list of numbers.
on getMedian(theList, l, r)
if (theList is {}) then return theList
Line 512:
set end of testList to (random number 500) / 5
end repeat
return {|numbers|:testList, median:getMedian(testList, 1, (count testList))}</langsyntaxhighlight>
 
{{output}}
<pre>{|numbers|:{71.6, 44.8, 45.8, 28.6, 96.8, 98.4, 42.4, 97.8}, median:58.7}</pre>
===Partial heap sort===
<langsyntaxhighlight lang=applescript>-- Based on the heap sort algorithm ny J.W.J. Williams.
on getMedian(theList, l, r)
script o
Line 579:
end repeat
return {|numbers|:testList, median:getMedian(testList, 1, (count testList))}
</syntaxhighlight>
</lang>
 
{{output}}
<langsyntaxhighlight lang=applescript>{|numbers|:{28.0, 75.6, 21.4, 51.8, 79.6, 25.0, 95.4, 31.2}, median:41.5}</langsyntaxhighlight>
 
=={{header|Applesoft BASIC}}==
<langsyntaxhighlight lang=Applesoft BASIC> 100 REMMEDIAN
110 K = INT(L/2) : GOSUB 150
120 R = X(K)
Line 609:
300 REMSWAP
310 H = X(P1):X(P1) = X(P2)
320 X(P2) = H: RETURN</langsyntaxhighlight>Example:<syntaxhighlight lang =ApplesoftBASIC>X(0)=4.4 : X(1)=2.3 : X(2)=-1.7 : X(3)=7.5 : X(4)=6.6 : X(5)=0.0 : X(6)=1.9 : X(7)=8.2 : X(8)=9.3 : X(9)=4.5 : X(10)=-11.7
L = 11 : GOSUB 100MEDIAN
? R</langsyntaxhighlight>Output:<pre>5.95</pre>
 
=={{header|Arturo}}==
 
<langsyntaxhighlight lang=rebol>arr: [1 2 3 4 5 6 7]
arr2: [1 2 3 4 5 6]
print median arr
print median arr2</langsyntaxhighlight>
 
{{out}}
Line 628:
=={{header|AutoHotkey}}==
Takes the lower of the middle two if length is even
<langsyntaxhighlight lang=AutoHotkey>seq = 4.1, 7.2, 1.7, 9.3, 4.4, 3.2, 5
MsgBox % median(seq, "`,") ; 4.1
 
Line 637:
median := Floor(seq0 / 2)
Return seq%median%
}</langsyntaxhighlight>
 
=={{header|AWK}}==
Line 643:
AWK arrays can be passed as parameters, but not returned, so they are usually global.
 
<langsyntaxhighlight lang=awk>#!/usr/bin/awk -f
 
BEGIN {
Line 689:
print ""
}
</syntaxhighlight>
</lang>
 
Example output:
Line 697:
 
=={{header|BaCon}}==
<langsyntaxhighlight lang=freebasic>DECLARE a[] = { 4.1, 5.6, 7.2, 1.7, 9.3, 4.4, 3.2 } TYPE FLOATING
DECLARE b[] = { 4.1, 7.2, 1.7, 9.3, 4.4, 3.2 } TYPE FLOATING
 
Line 708:
 
SORT b
PRINT "Median of b: ", Median(b)</langsyntaxhighlight>
{{out}}
<pre>
Line 726:
Note that in order to truly work with the Windows versions of PowerBASIC, the module-level code must be contained inside <code>FUNCTION PBMAIN</code>. Similarly, in order to work under Visual Basic, the same module-level code must be contained with <code>Sub Main</code>.
 
<langsyntaxhighlight lang=qbasic>DECLARE FUNCTION median! (vector() AS SINGLE)
 
DIM vec1(10) AS SINGLE, vec2(11) AS SINGLE, n AS INTEGER
Line 755:
median = (v(INT((ub + lb) / 2)) + v(INT((ub + lb) / 2) + 1)) / 2
END IF
END FUNCTION</langsyntaxhighlight>
 
See also: [[#BBC BASIC|BBC BASIC]], [[#Liberty BASIC|Liberty BASIC]], [[#PureBasic|PureBasic]], [[#TI-83 BASIC|TI-83 BASIC]], [[#TI-89 BASIC|TI-89 BASIC]].
Line 761:
=={{header|BBC BASIC}}==
{{works with|BBC BASIC for Windows}}
<langsyntaxhighlight lang=bbcbasic> INSTALL @lib$+"SORTLIB"
Sort% = FN_sortinit(0,0)
 
Line 777:
CALL Sort%, a(0)
= (a(C% DIV 2) + a((C%-1) DIV 2)) / 2
</syntaxhighlight>
</lang>
Output:
<pre>Median of a() is 4.4
Line 794:
Each number is packaged in a little list and these lists are accumulated in a sum. Bracmat keeps sums sorted, so the median is the term in the middle of the list, or the average of the two terms in the middle of the list.
 
<langsyntaxhighlight lang=bracmat>(median=
begin decimals end int list med med1 med2 num number
. 0:?list
Line 818:
)
& !med
);</langsyntaxhighlight>
 
Line 834:
 
=={{header|C}}==
<langsyntaxhighlight lang=C>#include <stdio.h>
#include <stdlib.h>
 
Line 864:
printf("flist2 median is %7.2f\n", median(&flist2)); /* 4.60 */
return 0;
}</langsyntaxhighlight>
===Quickselect algorithm===
Average O(n) time:
<langsyntaxhighlight lang=c>#include <stdio.h>
#include <stdlib.h>
#include <time.h>
Line 946:
return 0;
}
</syntaxhighlight>
</lang>
 
Output:
<langsyntaxhighlight lang=c>length: 992021
median: 0.000473
<: 496010
>: 496010
=: 1</langsyntaxhighlight>
 
=={{header|C sharp|C#}}==
<langsyntaxhighlight lang=csharp>using System;
using System.Linq;
 
Line 989:
}
}
</syntaxhighlight>
</lang>
 
=={{header|C++}}==
This function runs in linear time on average.
<langsyntaxhighlight lang=cpp>#include <algorithm>
 
// inputs must be random-access iterators of doubles
Line 1,024:
 
return 0;
}</langsyntaxhighlight>
 
===Order Statistic Tree===
Uses a GNU C++ policy-based data structure to compute median in O(log n) time.
{{libheader|gnu_pbds}}
<langsyntaxhighlight lang=cpp>#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
Line 1,068:
return 0;
}
</syntaxhighlight>
</lang>
 
=={{header|Clojure}}==
Simple:
<langsyntaxhighlight lang=lisp>(defn median [ns]
(let [ns (sort ns)
cnt (count ns)
Line 1,078:
(if (odd? cnt)
(nth ns mid)
(/ (+ (nth ns mid) (nth ns (dec mid))) 2))))</langsyntaxhighlight>
 
=={{header|COBOL}}==
Intrinsic function:
<langsyntaxhighlight lang=cobol>FUNCTION MEDIAN(some-table (ALL))</langsyntaxhighlight>
 
=={{header|Common Lisp}}==
Line 1,088:
The recursive partitioning solution, without the median of medians optimization.
 
<langsyntaxhighlight lang=lisp>((defun select-nth (n list predicate)
"Select nth element in list, ordered by predicate, modifying list."
(do ((pivot (pop list))
Line 1,110:
 
(defun median (list predicate)
(select-nth (floor (length list) 2) list predicate))</langsyntaxhighlight>
 
=={{header|Crystal}}==
<langsyntaxhighlight lang=ruby>def median(ary)
srtd = ary.sort
alen = srtd.size
Line 1,127:
a = [5.0]
puts median a
</syntaxhighlight>
</lang>
 
{{out}}
Line 1,137:
 
=={{header|D}}==
<langsyntaxhighlight lang=d>import std.stdio, std.algorithm;
 
T median(T)(T[] nums) pure nothrow {
Line 1,153:
auto a2 = [5.1, 2.6, 8.8, 4.6, 4.1];
writeln("Odd median: ", a2.median);
}</langsyntaxhighlight>
{{out}}
<pre>Even median: 4.85
Line 1,159:
 
=={{header|Delphi}}==
<langsyntaxhighlight lang=Delphi>program AveragesMedian;
 
{$APPTYPE CONSOLE}
Line 1,181:
Writeln(Median(TDoubleDynArray.Create(4.1, 5.6, 7.2, 1.7, 9.3, 4.4, 3.2)));
Writeln(Median(TDoubleDynArray.Create(4.1, 7.2, 1.7, 9.3, 4.4, 3.2)));
end.</langsyntaxhighlight>
 
=={{header|E}}==
Line 1,187:
TODO: Use the selection algorithm, whatever that is [[Category:E examples needing attention]]
 
<langsyntaxhighlight lang=e>def median(list) {
def sorted := list.sort()
def count := sorted.size()
Line 1,197:
return (sorted[mid1] + sorted[mid2]) / 2
}
}</langsyntaxhighlight>
 
<langsyntaxhighlight lang=e>? median([1,9,2])
# value: 2
 
? median([1,9,2,4])
# value: 3.0</langsyntaxhighlight>
 
=={{header|EasyLang}}==
Line 1,247:
test[] = [ 4.1 7.2 1.7 9.3 4.4 3.2 ]
call median test[] med
print med</langsyntaxhighlight>
 
<pre>
Line 1,255:
 
=={{header|EchoLisp}}==
<langsyntaxhighlight lang=scheme>
(define (median L) ;; O(n log(n))
(set! L (vector-sort! < (list->vector L)))
Line 1,271:
(median (iota 10001))
→ 5000
</syntaxhighlight>
</lang>
 
=={{header|Elena}}==
ELENA 5.0 :
<langsyntaxhighlight lang=elena>import system'routines;
import system'math;
import extensions;
Line 1,314:
console.readChar()
}</langsyntaxhighlight>
{{out}}
<pre>
Line 1,323:
=={{header|Elixir}}==
{{trans|Erlang}}
<langsyntaxhighlight lang=elixir>defmodule Average do
def median([]), do: nil
def median(list) do
Line 1,338:
Enum.each(1..6, fn i ->
(for _ <- 1..i, do: :rand.uniform(6)) |> median.()
end)</langsyntaxhighlight>
 
{{out}}
Line 1,352:
 
=={{header|Erlang}}==
<langsyntaxhighlight lang=erlang>-module(median).
-import(lists, [nth/2, sort/1]).
-compile(export_all).
Line 1,415:
end.
</syntaxhighlight>
</lang>
 
=={{header|ERRE}}==
Line 1,455:
PRINT(R)
END PROGRAM
</syntaxhighlight>
</lang>
Ouput is 5.95
 
Line 1,464:
v. Moreover it can search for the p median, not only the p=0.5 median.
 
<langsyntaxhighlight lang=Euler Math Toolbox>
>type median
function median (x, v: none, p)
Line 1,515:
>0.2*10+0.8*1
2.8
</syntaxhighlight>
</lang>
 
=={{header|Euphoria}}==
<langsyntaxhighlight lang=euphoria>function median(sequence s)
atom min,k
-- Selection sort of half+1
Line 1,542:
end function
 
? median({ 4.4, 2.3, -1.7, 7.5, 6.6, 0.0, 1.9, 8.2, 9.3, 4.5 })</langsyntaxhighlight>
 
Output:
Line 1,551:
Assuming the values are entered in the A column, type into any cell which will not be part of the list :
 
<langsyntaxhighlight lang=excel>
=MEDIAN(A1:A10)
</syntaxhighlight>
</lang>
 
Assuming 10 values will be entered, alternatively, you can just type
 
<langsyntaxhighlight lang=excel>
=MEDIAN(
</syntaxhighlight>
</lang>
and then select the start and end cells, not necessarily in the same row or column.
 
Line 1,575:
9
0
</syntaxhighlight>
</lang>
 
=={{header|F Sharp|F#}}==
Median of Medians algorithm implementation
<langsyntaxhighlight lang=fsharp>
let rec splitToFives list =
match list with
Line 1,624:
let z' = [1.;5.;2.;8.;7.]
start z'
</syntaxhighlight>
</lang>
 
=={{header|Factor}}==
The quicksort-style solution, with random pivoting. Takes the lesser of the two medians for even sequences.
<langsyntaxhighlight lang=factor>USING: arrays kernel locals math math.functions random sequences ;
IN: median
 
Line 1,654:
 
: median ( seq -- median )
dup length 1 - 2 / floor nth-in-order ;</langsyntaxhighlight>
 
Usage:
<langsyntaxhighlight lang=factor>( scratchpad ) 11 iota median .
5
( scratchpad ) 10 iota median .
4</langsyntaxhighlight>
 
=={{header|Forth}}==
This uses the O(n) algorithm derived from [[quicksort]].
<langsyntaxhighlight lang=forth>-1 cells constant -cell
: cell- -cell + ;
 
Line 1,693:
: median ( array len -- m )
1- cells over + 2dup mid to midpoint
select midpoint @ ;</langsyntaxhighlight>
<langsyntaxhighlight lang=forth>create test 4 , 2 , 1 , 3 , 5 ,
 
test 4 median . \ 2
test 5 median . \ 3</langsyntaxhighlight>
 
=={{header|Fortran}}==
{{works with|Fortran|90 and later}}
 
<langsyntaxhighlight lang=fortran>program Median_Test
 
real :: a(7) = (/ 4.1, 5.6, 7.2, 1.7, 9.3, 4.4, 3.2 /), &
Line 1,744:
end function median
 
end program Median_Test</langsyntaxhighlight>
 
If one refers to [[Quickselect_algorithm#Fortran]] which offers function FINDELEMENT(K,A,N) that returns the value of A(K) when the array of N elements has been rearranged if necessary so that A(K) is the K'th in order, then, supposing that a version is devised using the appropriate type for array A, <langsyntaxhighlight lang=Fortran> K = N/2
MEDIAN = FINDELEMENT(K + 1,A,N)
IF (MOD(N,2).EQ.0) MEDIAN = (FINDELEMENT(K,A,N) + MEDIAN)/2 </langsyntaxhighlight>
As well as returning a result, the function possibly re-arranges the elements of the array, which is not "pure" behaviour. Not to the degree of fully sorting them, merely that all elements before K are not larger than A(K) as it now is, and all elements after K are not smaller than A(K).
 
=={{header|FreeBASIC}}==
<langsyntaxhighlight lang=freebasic>' FB 1.05.0 Win64
 
Sub quicksort(a() As Double, first As Integer, last As Integer)
Line 1,797:
Print
Print "Press any key to quit"
Sleep</langsyntaxhighlight>
 
{{out}}
Line 1,806:
 
=={{header|GAP}}==
<langsyntaxhighlight lang=gap>Median := function(v)
local n, w;
w := SortedList(v);
Line 1,819:
# 44
Median(b);
# 85/2</langsyntaxhighlight>
 
=={{header|Go}}==
===Sort===
Go built-in sort. O(n log n).
<langsyntaxhighlight lang=go>package main
 
import (
Line 1,844:
}
return m
}</langsyntaxhighlight>
===Partial selection sort===
 
Line 1,850:
Unfortunately in the case of median, k is n/2 so the algorithm is O(n^2). Still, it gives the idea of median by selection. Note that the partial selection sort does leave the k smallest values sorted, so in the case of an even number of elements, the two elements to average are available after a single call to sel().
 
<langsyntaxhighlight lang=go>package main
 
import "fmt"
Line 1,880:
}
return list[k]
}</langsyntaxhighlight>
===Quickselect===
It doesn't take too much more code to implement a quickselect with random pivoting, which should run in expected time O(n). The qsel function here permutes elements of its parameter "a" in place. It leaves the slice somewhat more ordered, but unlike the sort and partial sort examples above, does not guarantee that element k-1 is in place. For the case of an even number of elements then, median must make two separate qsel() calls.
<langsyntaxhighlight lang=go>package main
 
import (
Line 1,934:
}
return a[0]
}</langsyntaxhighlight>
 
=={{header|Groovy}}==
Solution (brute force sorting, with arithmetic averaging of dual midpoints (even sizes)):
<langsyntaxhighlight lang=groovy>def median(Iterable col) {
def s = col as SortedSet
if (s == null) return null
Line 1,946:
def l = s.collect { it }
n%2 == 1 ? l[m] : (l[m] + l[m-1])/2
}</langsyntaxhighlight>
 
Test:
<langsyntaxhighlight lang=groovy>def a = [4.4, 2.3, -1.7, 7.5, 6.6, 0.0, 1.9, 8.2, 9.3, 4.5]
def sz = a.size()
 
Line 1,955:
println """${median(a[0..<(sz-it)])} == median(${a[0..<(sz-it)]})
${median(a[it..<sz])} == median(${a[it..<sz]})"""
}</langsyntaxhighlight>
 
Output:
Line 1,984:
 
This uses a quick select algorithm and runs in expected O(n) time.
<langsyntaxhighlight lang=haskell>import Data.List (partition)
 
nth :: Ord t => [t] -> Int -> t
Line 2,009:
[[], [7], [5, 3, 4], [5, 4, 2, 3], [3, 4, 1, -8.4, 7.2, 4, 1, 1.2]]
where
printMay = maybe (putStrLn "(not defined)") print</langsyntaxhighlight>
{{Out}}
<pre>(not defined)
Line 2,019:
Or {{libheader|hstats}}
 
<langsyntaxhighlight lang=haskell>> Math.Statistics.median [1,9,2,4]
3.0</langsyntaxhighlight>
 
=={{header|HicEst}}==
If the input has an even number of elements, median is the mean of the middle two values:
<langsyntaxhighlight lang=HicEst>REAL :: n=10, vec(n)
 
vec = RAN(1)
Line 2,033:
ELSE
median = ( vec(n/2) + vec(n/2 + 1) ) / 2
ENDIF</langsyntaxhighlight>
 
=={{header|Icon}} and {{header|Unicon}}==
Line 2,046:
return if n % 2 = 1 then A[n/2+1]
else (A[n/2]+A[n/2+1])/2.0 | 0 # 0 if empty list
end</langsyntaxhighlight>
 
Sample outputs:
Line 2,057:
=={{header|J}}==
The verb <code>median</code> is available from the <code>stats/base</code> addon and returns the mean of the two middle values for an even number of elements:
<langsyntaxhighlight lang=j> require 'stats/base'
median 1 9 2 4
3</langsyntaxhighlight>
The definition given in the addon script is:
<langsyntaxhighlight lang=j>midpt=: -:@<:@#
median=: -:@(+/)@((<. , >.)@midpt { /:~)</langsyntaxhighlight>
 
If, for an even number of elements, both values were desired when those two values are distinct, then the following implementation would suffice:
<langsyntaxhighlight lang=j> median=: ~.@(<. , >.)@midpt { /:~
median 1 9 2 4
2 4</langsyntaxhighlight>
 
=={{header|Java}}==
Line 2,073:
 
Sorting:
<langsyntaxhighlight lang=java5>// Note: this function modifies the input list
public static double median(List<Double> list) {
Collections.sort(list);
return (list.get(list.size() / 2) + list.get((list.size() - 1) / 2)) / 2;
}</langsyntaxhighlight>
 
{{works with|Java|1.5+}}
 
Using priority queue (which sorts under the hood):
<langsyntaxhighlight lang=java5>public static double median2(List<Double> list) {
PriorityQueue<Double> pq = new PriorityQueue<Double>(list);
int n = list.size();
Line 2,091:
else
return (pq.poll() + pq.poll()) / 2.0;
}</langsyntaxhighlight>
 
{{works with|Java|1.8+}}
Line 2,097:
This version operates on objects rather than primitives and uses abstractions to operate on all of the standard numerics.
 
<langsyntaxhighlight lang=java8>
@FunctionalInterface
interface MedianFinder<T, R> extends Function<Collection<T>, R> {
Line 2,148:
public static BigDecimal bigDecimals(Collection<BigDecimal> bigDecimalCollection) { return BIG_DECIMALS.apply(bigDecimalCollection); }
}
</syntaxhighlight>
</lang>
 
=={{header|JavaScript}}==
 
===ES5===
<langsyntaxhighlight lang=javascript>function median(ary) {
if (ary.length == 0)
return null;
Line 2,167:
median([5,3,4]); // 4
median([5,4,2,3]); // 3.5
median([3,4,1,-8.4,7.2,4,1,1.2]); // 2.1</langsyntaxhighlight>
 
===ES6===
Line 2,174:
{{Trans|Haskell}}
 
<langsyntaxhighlight lang=JavaScript>(() => {
'use strict';
 
Line 2,225:
[3, 4, 1, -8.4, 7.2, 4, 1, 1.2]
].map(median);
})();</langsyntaxhighlight>
 
{{Out}}
<langsyntaxhighlight lang=JavaScript>[
null,
4,
3.5,
2.1
]</langsyntaxhighlight>
 
=={{header|jq}}==
<langsyntaxhighlight lang=jq>def median:
length as $length
| sort as $s
Line 2,245:
else $s[$l2]
end
end ;</langsyntaxhighlight>This definition can be used in a jq program, but to illustrate how it can be used as a command line filter, suppose the definition and the program '''median''' are in a file named median.jq, and that the file in.dat contains a sequence of arrays, such as <langsyntaxhighlight lang=sh>[4.1, 5.6, 7.2, 1.7, 9.3, 4.4, 3.2]
[4.1, 7.2, 1.7, 9.3, 4.4, 3.2]</langsyntaxhighlight>Then invoking the jq program yields a stream of values:<langsyntaxhighlight lang=sh>$ jq -f median.jq in.dat
4.4
4.25</langsyntaxhighlight>
 
=={{header|Julia}}==
Julia has a built-in median() function
<langsyntaxhighlight lang=julia>using Statistics
function median2(n)
s = sort(n)
Line 2,266:
b = [4.1, 7.2, 1.7, 9.3, 4.4, 3.2]
 
@show a b median2(a) median(a) median2(b) median(b) </langsyntaxhighlight>
 
{{out}}
Line 2,279:
 
=={{header|K}}==
<syntaxhighlight lang=k>
<lang k>
med:{a:x@<x; i:(#a)%2; :[(#a)!2; a@i; {(+/x)%#x} a@i,i-1]}
v:10*6 _draw 0
Line 2,288:
med[1_ v]
2.281911
</syntaxhighlight>
</lang>
 
An alternate solution which works in the oK implementation using the same dataset v from above and shows both numbers around the median point on even length datasets would be:
<syntaxhighlight lang=k>
<lang k>
med:{a:x@<x; i:_(#a)%2
$[2!#a; a@i; |a@i,i-1]}
med[v]
2.2819 4.8547
</syntaxhighlight>
</lang>
 
=={{header|Kotlin}}==
{{works with|Kotlin|1.0+}}
<langsyntaxhighlight lang=scala>fun median(l: List<Double>) = l.sorted().let { (it[it.size / 2] + it[(it.size - 1) / 2]) / 2 }
 
fun main(args: Array<String>) {
Line 2,306:
median(listOf(5.0, 4.0, 2.0, 3.0)).let { println(it) } // 3.5
median(listOf(3.0, 4.0, 1.0, -8.4, 7.2, 4.0, 1.0, 1.2)).let { println(it) } // 2.1
}</langsyntaxhighlight>
 
=={{header|Lasso}}==
Line 2,313:
 
Lasso's built in function is "median( value_1, value_2, value_3 )"
<langsyntaxhighlight lang=Lasso>define median_ext(a::array) => {
#a->sort
 
Line 2,327:
 
median_ext(array(3,2,7,6)) // 4.5
median_ext(array(3,2,9,7,6)) // 6</langsyntaxhighlight>
 
=={{header|Liberty BASIC}}==
<syntaxhighlight lang=lb>
<lang lb>
dim a( 100), b( 100) ' assumes we will not have vectors of more terms...
 
Line 2,375:
if middle <>intmiddle then median= a( 1 +intmiddle) else median =( a( intmiddle) +a( intmiddle +1)) /2
end function
</syntaxhighlight>
</lang>
<pre>
4.1 5.6 7.2 1.7 9.3 4.4 3.2
Line 2,397:
 
=={{header|Lingo}}==
<langsyntaxhighlight lang=Lingo>on median (numlist)
-- numlist = numlist.duplicate() -- if input list should not be altered
numlist.sort()
Line 2,405:
return (numlist[numlist.count/2]+numlist[numlist.count/2+1])/2.0
end if
end</langsyntaxhighlight>
 
=={{header|LiveCode}}==
LC has median as a built-in function
<langsyntaxhighlight lang=LiveCode>put median("4.1,5.6,7.2,1.7,9.3,4.4,3.2") & "," & median("4.1,7.2,1.7,9.3,4.4,3.2")
returns 4.4, 4.25</langsyntaxhighlight>
 
To make our own, we need own own floor function first
 
<langsyntaxhighlight lang=LiveCode>function floor n
if n < 0 then
return (trunc(n) - 1)
Line 2,437:
returns the same as the built-in median, viz.
put median2("4.1,5.6,7.2,1.7,9.3,4.4,3.2") & "," & median2("4.1,7.2,1.7,9.3,4.4,3.2")
4.4,4.25</langsyntaxhighlight>
 
=={{header|LSL}}==
<langsyntaxhighlight lang=LSL>integer MAX_ELEMENTS = 10;
integer MAX_VALUE = 100;
default {
Line 2,461:
llOwnerSay(" Sum Squares: "+(string)llListStatistics(LIST_STAT_SUM_SQUARES, lst));
}
}</langsyntaxhighlight>
Output:
<pre>
Line 2,478:
 
=={{header|Lua}}==
<langsyntaxhighlight lang=lua>function median (numlist)
if type(numlist) ~= 'table' then return numlist end
table.sort(numlist)
Line 2,486:
 
print(median({4.1, 5.6, 7.2, 1.7, 9.3, 4.4, 3.2}))
print(median({4.1, 7.2, 1.7, 9.3, 4.4, 3.2}))</langsyntaxhighlight>
 
=={{header|Maple}}==
=== Builtin ===
This works for numeric lists or arrays, and is designed for large data sets.
<langsyntaxhighlight lang=Maple>
> Statistics:-Median( [ 1, 5, 3, 2, 4 ] );
3.
Line 2,497:
> Statistics:-Median( [ 1, 5, 3, 6, 2, 4 ] );
3.50000000000000
</syntaxhighlight>
</lang>
=== Using a sort ===
This solution can handle exact numeric inputs. Instead of inputting a container of some kind, it simply finds the median of its arguments.
<langsyntaxhighlight lang=Maple>
median1 := proc()
local L := sort( [ args ] );
( L[ iquo( 1 + nargs, 2 ) ] + L[ 1 + iquo( nargs, 2 ) ] ) / 2
end proc:
</syntaxhighlight>
</lang>
For example:
<langsyntaxhighlight lang=Maple>
> median1( 1, 5, 3, 2, 4 ); # 3
3
Line 2,513:
> median1( 1, 5, 3, 6, 4, 2 ); # 7/2
7/2
</syntaxhighlight>
</lang>
 
=={{header|Mathematica}} / {{header|Wolfram Language}}==
Built-in function:
<langsyntaxhighlight lang=Mathematica>Median[{1, 5, 3, 2, 4}]
Median[{1, 5, 3, 6, 4, 2}]</langsyntaxhighlight>
{{out}}
<pre>3
7/2</pre>
Custom function:
<langsyntaxhighlight lang=Mathematica>mymedian[x_List]:=Module[{t=Sort[x],L=Length[x]},
If[Mod[L,2]==0,
(t[[L/2]]+t[[L/2+1]])/2
Line 2,529:
t[[(L+1)/2]]
]
]</langsyntaxhighlight>
Example of custom function:
<langsyntaxhighlight lang=Mathematica>mymedian[{1, 5, 3, 2, 4}]
mymedian[{1, 5, 3, 6, 4, 2}]</langsyntaxhighlight>
{{out}}
<pre>3
Line 2,539:
=={{header|MATLAB}}==
If the input has an even number of elements, function returns the mean of the middle two values:
<langsyntaxhighlight lang=Matlab>function medianValue = findmedian(setOfValues)
medianValue = median(setOfValues);
end</langsyntaxhighlight>
 
=={{header|Maxima}}==
<langsyntaxhighlight lang=maxima>/* built-in */
median([41, 56, 72, 17, 93, 44, 32]); /* 44 */
median([41, 72, 17, 93, 44, 32]); /* 85/2 */</langsyntaxhighlight>
 
=={{header|MiniScript}}==
<langsyntaxhighlight lang=MiniScript>list.median = function()
self.sort
m = floor(self.len/2)
Line 2,557:
print [41, 56, 72, 17, 93, 44, 32].median
print [41, 72, 17, 93, 44, 32].median</langsyntaxhighlight>
{{out}}
<pre>44
Line 2,563:
 
=={{header|MUMPS}}==
<langsyntaxhighlight lang=MUMPS>MEDIAN(X)
;X is assumed to be a list of numbers separated by "^"
;I is a loop index
Line 2,577:
SET J="" FOR I=1:1:$SELECT(ODD:L\2+1,'ODD:L/2) SET J=$ORDER(Y(J))
QUIT $SELECT(ODD:J,'ODD:(J+$ORDER(Y(J)))/2)
</syntaxhighlight>
</lang>
<pre>USER>W $$MEDIAN^ROSETTA("-1.3^2.43^3.14^17^2E-3")
3.14
Line 2,589:
=={{header|Nanoquery}}==
{{trans|Python}}
<langsyntaxhighlight lang=Nanoquery>import sort
 
def median(aray)
Line 2,600:
println a + " " + median(a)
a = {4.1, 7.2, 1.7, 9.3, 4.4, 3.2}
println a + " " + median(a)</langsyntaxhighlight>
 
=={{header|NetRexx}}==
{{trans|Java}}
<langsyntaxhighlight lang=NetRexx>/* NetRexx */
options replace format comments java crossref symbols nobinary
 
Line 2,668:
if i > j then return +1
else return 0
</syntaxhighlight>
</lang>
'''Output:'''
<pre>
Line 2,692:
 
=={{header|NewLISP}}==
<langsyntaxhighlight lang=NewLISP>; median.lsp
; oofoe 2012-01-25
 
Line 2,714:
(test '(3 4 1 -8.4 7.2 4 1 1.2))
 
(exit)</langsyntaxhighlight>
 
Sample output:
Line 2,726:
=={{header|Nim}}==
{{trans|Python}}
<langsyntaxhighlight lang=nim>import algorithm, strutils
proc median(xs: seq[float]): float =
Line 2,736:
echo formatFloat(median(a), precision = 0)
a = @[4.1, 7.2, 1.7, 9.3, 4.4, 3.2]
echo formatFloat(median(a), precision = 0)</langsyntaxhighlight>
 
Example Output:
Line 2,744:
=={{header|Oberon-2}}==
Oxford Oberon-2
<langsyntaxhighlight lang=oberon2>
MODULE Median;
IMPORT Out;
Line 2,826:
Out.Fixed(Median(ary,0,7),4,2);Out.Ln;
END Median.
</syntaxhighlight>
</lang>
Output:
<pre>
Line 2,836:
 
=={{header|Objeck}}==
<langsyntaxhighlight lang=objeck>
use Structure;
 
Line 2,868:
}
}
</syntaxhighlight>
</lang>
 
=={{header|OCaml}}==
<langsyntaxhighlight lang=ocaml>(* note: this modifies the input array *)
let median array =
let len = Array.length array in
Line 2,880:
median a;;
let a = [|4.1; 7.2; 1.7; 9.3; 4.4; 3.2|];;
median a;;</langsyntaxhighlight>
 
=={{header|Octave}}==
Of course Octave has its own <tt>median</tt> function we can use to check our implementation. The Octave's median function, however, does not handle the case you pass in a void vector.
<langsyntaxhighlight lang=octave>function y = median2(v)
if (numel(v) < 1)
y = NA;
Line 2,904:
disp(median(a))
disp(median2(b)) % 4.25
disp(median(b))</langsyntaxhighlight>
 
=={{header|ooRexx}}==
<langsyntaxhighlight lang=ooRexx>
call testMedian .array~of(10, 9, 8, 7, 6, 5, 4, 3, 2, 1)
call testMedian .array~of(10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 0, 0, 0, .11)
Line 2,944:
-- results for the compares
return (left - right)~sign
</syntaxhighlight>
</lang>
 
=={{header|Oz}}==
<langsyntaxhighlight lang=oz>declare
fun {Median Xs}
Len = {Length Xs}
Line 2,959:
in
{Show {Median [4.1 5.6 7.2 1.7 9.3 4.4 3.2]}}
{Show {Median [4.1 7.2 1.7 9.3 4.4 3.2]}}</langsyntaxhighlight>
 
=={{header|PARI/GP}}==
Sorting solution.
<langsyntaxhighlight lang=parigp>median(v)={
vecsort(v)[#v\2]
};</langsyntaxhighlight>
 
Linear-time solution, mostly proof-of-concept but perhaps suitable for large lists.
<langsyntaxhighlight lang=parigp>BFPRT(v,k=#v\2)={
if(#v<15, return(vecsort(v)[k]));
my(u=List(),pivot,left=List(),right=List());
Line 2,988:
BFPRT(left, k)
)
};</langsyntaxhighlight>
 
=={{header|Pascal}}==
{{works with|Free_Pascal}}
<langsyntaxhighlight lang=pascal>Program AveragesMedian(output);
 
type
Line 3,048:
writeln;
writeln('Median: ', Median(A):7:3);
end.</langsyntaxhighlight>
Output:
<pre>% ./Median
Line 3,059:
=={{header|Perl}}==
{{trans|Python}}
<langsyntaxhighlight lang=perl>sub median {
my @a = sort {$a <=> $b} @_;
return ($a[$#a/2] + $a[@a/2]) / 2;
}</langsyntaxhighlight>
 
=={{header|Phix}}==
The obvious simple way:
<!--<langsyntaxhighlight lang=Phix>(phixonline)-->
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span>
<span style="color: #008080;">function</span> <span style="color: #000000;">median</span><span style="color: #0000FF;">(</span><span style="color: #004080;">sequence</span> <span style="color: #000000;">s</span><span style="color: #0000FF;">)</span>
Line 3,080:
<span style="color: #008080;">return</span> <span style="color: #000000;">res</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
<!--</langsyntaxhighlight>-->
It is also possible to use the [[Quickselect_algorithm#Phix|quick_select]] routine for a small (20%) performance improvement,
which as suggested below may with luck be magnified by retaining any partially sorted results.
<!--<langsyntaxhighlight lang=Phix>(phixonline)-->
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span>
<span style="color: #008080;">function</span> <span style="color: #000000;">medianq</span><span style="color: #0000FF;">(</span><span style="color: #004080;">sequence</span> <span style="color: #000000;">s</span><span style="color: #0000FF;">)</span>
Line 3,097:
<span style="color: #008080;">return</span> <span style="color: #000000;">res</span> <span style="color: #000080;font-style:italic;">-- (or perhaps return {s,res})</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
<!--</langsyntaxhighlight>-->
 
=={{header|Phixmonti}}==
<langsyntaxhighlight lang=Phixmonti>include ..\Utilitys.pmt
 
def median /# l -- n #/
Line 3,113:
 
( 4.1 5.6 7.2 1.7 9.3 4.4 3.2 ) median ?
( 4.1 7.2 1.7 9.3 4.4 3.2 ) median ?</langsyntaxhighlight>
 
=={{header|PHP}}==
This solution uses the sorting method of finding the median.
<langsyntaxhighlight lang=php>
function median($arr)
{
Line 3,135:
echo median(array(4.1, 5.6, 7.2, 1.7, 9.3, 4.4, 3.2)) . "\n"; // 4.4
echo median(array(4.1, 7.2, 1.7, 9.3, 4.4, 3.2)) . "\n"; // 4.25
</syntaxhighlight>
</lang>
 
=={{header|Picat}}==
<langsyntaxhighlight lang=Picat>go =>
Lists = [
[1.121,10.3223,3.41,12.1,0.01],
Line 3,162:
Len = L.length,
H = Len // 2,
LL = sort(L).</langsyntaxhighlight>
 
{{out}}
Line 3,177:
 
=={{header|PicoLisp}}==
<langsyntaxhighlight lang=PicoLisp>(de median (Lst)
(let N (length Lst)
(if (bit? 1 N)
Line 3,188:
(prinl (round (median (1.0 2.0 3.0 4.0))))
(prinl (round (median (5.1 2.6 6.2 8.8 4.6 4.1))))
(prinl (round (median (5.1 2.6 8.8 4.6 4.1))))</langsyntaxhighlight>
Output:
<pre>2.00
Line 3,196:
 
=={{header|PL/I}}==
<langsyntaxhighlight lang=pli>call sort(A);
n = dimension(A,1);
if iand(n,1) = 1 then /* an odd number of elements */
median = A(n/2);
else /* an even number of elements */
median = (a(n/2) + a(trunc(n/2)+1) )/2;</langsyntaxhighlight>
 
=={{header|PowerShell}}==
Line 3,208:
All statistical properties could easily be added to the output object.
 
<langsyntaxhighlight lang=PowerShell>
function Measure-Data
{
Line 3,278:
}
}
</syntaxhighlight>
</lang>
<langsyntaxhighlight lang=PowerShell>
$statistics = Measure-Data 4, 5, 6, 7, 7, 7, 8, 1, 1, 1, 2, 3
$statistics
</syntaxhighlight>
</lang>
{{Out}}
<pre>
Line 3,296:
</pre>
Median only:
<langsyntaxhighlight lang=PowerShell>
$statistics.Median
</syntaxhighlight>
</lang>
{{Out}}
<pre>
Line 3,305:
 
=={{header|Processing}}==
<langsyntaxhighlight lang=Processing>void setup() {
float[] numbers = {3.1, 4.1, 5.9, 2.6, 5.3, 5.8};
println(median(numbers));
Line 3,316:
float median = (nums[(nums.length - 1) / 2] + nums[nums.length / 2]) / 2.0;
return median;
}</langsyntaxhighlight>
{{Out}}
<pre>4.7
Line 3,322:
 
=={{header|Prolog}}==
<langsyntaxhighlight lang=Prolog>median(L, Z) :-
length(L, Length),
I is Length div 2,
Line 3,330:
maplist(nth1, Mid, [S, S], X),
sumlist(X, Y),
Z is Y/2.</langsyntaxhighlight>
 
=={{header|Pure}}==
Inspired by the Haskell version.
<langsyntaxhighlight lang=Pure>median x = (/(2-rem)) $ foldl1 (+) $ take (2-rem) $ drop (mid-(1-rem)) $ sort (<=) x
when len = # x;
mid = len div 2;
rem = len mod 2;
end;</langsyntaxhighlight>
Output:<pre>> median [1, 3, 5];
3.0
Line 3,346:
 
=={{header|PureBasic}}==
<langsyntaxhighlight lang=PureBasic>Procedure.d median(Array values.d(1), length.i)
If length = 0 : ProcedureReturn 0.0 : EndIf
SortArray(values(), #PB_Sort_Ascending)
Line 3,380:
Data.i 6
Data.d 4.1, 7.2, 1.7, 9.3, 4.4, 3.2
EndDataSection</langsyntaxhighlight>
 
=={{header|Python}}==
<langsyntaxhighlight lang=python>def median(aray):
srtd = sorted(aray)
alen = len(srtd)
Line 3,391:
print a, median(a)
a = (4.1, 7.2, 1.7, 9.3, 4.4, 3.2)
print a, median(a)</langsyntaxhighlight>
 
=={{header|R}}==
Line 3,397:
{{trans|Octave}}
 
<langsyntaxhighlight lang=rsplus>omedian <- function(v) {
if ( length(v) < 1 )
NA
Line 3,416:
print(omedian(a))
print(median(b)) # 4.25
print(omedian(b))</langsyntaxhighlight>
 
=={{header|Racket}}==
<langsyntaxhighlight lang=Racket>#lang racket
(define (median numbers)
(define sorted (list->vector (sort (vector->list numbers) <)))
Line 3,432:
(median '#()) ;; #f
(median '#(5 4 2 3)) ;; 7/2
(median '#(3 4 1 -8.4 7.2 4 1 1.2)) ;; 2.1</langsyntaxhighlight>
 
=={{header|Raku}}==
Line 3,438:
 
{{works with|Rakudo|2016.08}}
<langsyntaxhighlight lang=perl6>sub median {
my @a = sort @_;
return (@a[(*-1) div 2] + @a[* div 2]) / 2;
}</langsyntaxhighlight>
 
Notes:
Line 3,450:
<br>
In a slightly more compact way:
<langsyntaxhighlight lang=perl6>sub median { @_.sort[(*-1)/2, */2].sum / 2 }</langsyntaxhighlight>
 
=={{header|REBOL}}==
<langsyntaxhighlight lang=rebol>
median: func [
"Returns the midpoint value in a series of numbers; half the values are above, half are below."
Line 3,469:
]
]
</syntaxhighlight>
</lang>
 
=={{header|ReScript}}==
<langsyntaxhighlight lang=ReScript>let median = (arr) =>
{
let float_compare = (a, b) => {
Line 3,495:
Js.log(median([4.1, 5.6, 7.2, 1.7, 9.3, 4.4, 3.2]))
Js.log(median([4.1, 7.2, 1.7, 9.3, 4.4, 3.2]))</langsyntaxhighlight>
{{out}}
<pre>
Line 3,505:
 
=={{header|REXX}}==
<langsyntaxhighlight lang=rexx>/*REXX program finds the median of a vector (and displays the vector and median).*/
/* ══════════vector════════════ ══show vector═══ ════════show result═══════════ */
v= 1 9 2 4 ; say "vector" v; say 'median──────►' median(v); say
Line 3,528:
n= m + 1 /*N: the next element after M. */
if # // 2 then return @.n /*[odd?] // ◄───REXX's ÷ remainder*/
return (@.m + @.n) / 2 /*process an even─element vector. */</langsyntaxhighlight>
{{out|output}}
<pre>
Line 3,545:
 
=={{header|Ring}}==
<langsyntaxhighlight lang=ring>
aList = [5,4,2,3]
see "medium : " + median(aList) + nl
Line 3,555:
return (srtd[alen/2] + srtd[alen/2 + 1]) / 2.0
else return srtd[ceil(alen/2)] ok
</syntaxhighlight>
</lang>
 
=={{header|Ruby}}==
<langsyntaxhighlight lang=ruby>def median(ary)
return nil if ary.empty?
mid, rem = ary.length.divmod(2)
Line 3,571:
p median([5,3,4]) # => 4
p median([5,4,2,3]) # => 3.5
p median([3,4,1,-8.4,7.2,4,1,1.2]) # => 2.1</langsyntaxhighlight>
 
Alternately:
<langsyntaxhighlight lang=ruby>def median(aray)
srtd = aray.sort
alen = srtd.length
(srtd[(alen-1)/2] + srtd[alen/2]) / 2.0
end</langsyntaxhighlight>
 
=={{header|Run BASIC}}==
<langsyntaxhighlight lang=Runbasic>sqliteconnect #mem, ":memory:"
mem$ = "CREATE TABLE med (x float)"
#mem execute(mem$)
Line 3,610:
print " Median :";median;chr$(9);" Values:";a$
 
RETURN</langsyntaxhighlight>Output:
<pre>Median :4.4 Values:4.1,5.6,7.2,1.7,9.3,4.4,3.2
Median :4.25 Values:4.1,7.2,1.7,9.3,4.4,3.2
Line 3,622:
Sorting, then obtaining the median element:
 
<langsyntaxhighlight lang=rust>fn median(mut xs: Vec<f64>) -> f64 {
// sort in ascending order, panic on f64::NaN
xs.sort_by(|x,y| x.partial_cmp(y).unwrap() );
Line 3,636:
let nums = vec![2.,3.,5.,0.,9.,82.,353.,32.,12.];
println!("{:?}", median(nums))
}</langsyntaxhighlight>
 
{{out}}
Line 3,644:
{{works with|Scala|2.8}} (See the Scala discussion on [[Mean]] for more information.)
 
<langsyntaxhighlight lang=scala>def median[T](s: Seq[T])(implicit n: Fractional[T]) = {
import n._
val (lower, upper) = s.sortWith(_<_).splitAt(s.size / 2)
if (s.size % 2 == 0) (lower.last + upper.head) / fromInt(2) else upper.head
}</langsyntaxhighlight>
 
This isn't really optimal. The methods <tt>splitAt</tt> and <tt>last</tt> are O(n/2)
Line 3,657:
{{trans|Python}}
Using Rosetta Code's [[Bubble_Sort#Scheme|bubble-sort function]]
<langsyntaxhighlight lang=Scheme>(define (median l)
(* (+ (list-ref (bubble-sort l >) (round (/ (- (length l) 1) 2)))
(list-ref (bubble-sort l >) (round (/ (length l) 2)))) 0.5))</langsyntaxhighlight>
 
Using [http://srfi.schemers.org/srfi-95/srfi-95.html SRFI-95]:
<langsyntaxhighlight lang=Scheme>(define (median l)
(* (+ (list-ref (sort l less?) (round (/ (- (length l) 1) 2)))
(list-ref (sort l less?) (round (/ (length l) 2)))) 0.5))</langsyntaxhighlight>
 
=={{header|Seed7}}==
<langsyntaxhighlight lang=seed7>$ include "seed7_05.s7i";
include "float.s7i";
Line 3,694:
writeln("flist1 median is " <& median(flist1) digits 2 lpad 7); # 4.85
writeln("flist2 median is " <& median(flist2) digits 2 lpad 7); # 4.60
end func;</langsyntaxhighlight>
 
=={{header|SenseTalk}}==
SenseTalk has a built-in median function. This example also shows the implementation of a customMedian function that returns the same results.
<langsyntaxhighlight lang=sensetalk>put the median of [4.1, 5.6, 7.2, 1.7, 9.3, 4.4, 3.2]
put the median of [4.1, 5.6, 7.2, 1.7, 9.3, 4.4, 3.2, 6.6]
 
Line 3,712:
return the middle item of list
end if
end customMedian</langsyntaxhighlight>
Output:
<langsyntaxhighlight lang=sensetalk>4.4
5
4.4
5</langsyntaxhighlight>
 
=={{header|Sidef}}==
<langsyntaxhighlight lang=ruby>func median(arry) {
var srtd = arry.sort;
var alen = srtd.length;
srtd[(alen-1)/2]+srtd[alen/2] / 2;
}</langsyntaxhighlight>
 
=={{header|Slate}}==
<langsyntaxhighlight lang=slate>s@(Sequence traits) median
[
s isEmpty
Line 3,737:
ifTrue: [(sorted middle + (sorted at: sorted indexMiddle - 1)) / 2]
ifFalse: [sorted middle]]
].</langsyntaxhighlight>
 
<langsyntaxhighlight lang=slate>inform: { 4.1 . 5.6 . 7.2 . 1.7 . 9.3 . 4.4 . 3.2 } median.
inform: { 4.1 . 7.2 . 1.7 . 9.3 . 4.4 . 3.2 } median.</langsyntaxhighlight>
 
=={{header|Smalltalk}}==
{{works with|GNU Smalltalk}}
 
<langsyntaxhighlight lang=smalltalk>OrderedCollection extend [
median [
self size = 0
Line 3,757:
ifTrue: [ ^nil ]
]
].</langsyntaxhighlight>
 
<langsyntaxhighlight lang=smalltalk>{ 4.1 . 5.6 . 7.2 . 1.7 . 9.3 . 4.4 . 3.2 } asOrderedCollection
median displayNl.
{ 4.1 . 7.2 . 1.7 . 9.3 . 4.4 . 3.2 } asOrderedCollection
median displayNl.</langsyntaxhighlight>
 
=={{header|Stata}}==
Use '''[https://www.stata.com/help.cgi?summarize summarize]''' to compute the median of a variable (as well as other basic statistics).
 
<langsyntaxhighlight lang=stata>set obs 100000
gen x=rbeta(0.2,1.3)
quietly summarize x, detail
display r(p50)</langsyntaxhighlight>
 
Here is a straightforward implementation using '''[https://www.stata.com/help.cgi? sort]'''.
 
<langsyntaxhighlight lang=stata>program calcmedian, rclass sortpreserve
sort `1'
if mod(_N,2)==0 {
Line 3,785:
 
calcmedian x
display r(p50)</langsyntaxhighlight>
 
=={{header|Tcl}}==
<langsyntaxhighlight lang=tcl>proc median args {
set list [lsort -real $args]
set len [llength $list]
Line 3,803:
}
 
puts [median 3.0 4.0 1.0 -8.4 7.2 4.0 1.0 1.2]; # --> 2.1</langsyntaxhighlight>
 
=={{header|TI-83 BASIC}}==
 
Using the built-in function:
<langsyntaxhighlight lang=ti83b>median({1.1, 2.5, 0.3241})</langsyntaxhighlight>
 
=={{header|TI-89 BASIC}}==
 
<langsyntaxhighlight lang=ti89b>median({3, 4, 1, -8.4, 7.2, 4, 1, 1})</langsyntaxhighlight>
 
=={{header|Ursala}}==
the simple way (sort first and then look in the middle)
<langsyntaxhighlight lang=Ursala>#import std
#import flo
 
median = fleq-<; @K30K31X eql?\~&rh div\2.+ plus@lzPrhPX</langsyntaxhighlight>
test program, once with an odd length and once with an even length vector
<langsyntaxhighlight lang=Ursala>#cast %eW
 
examples =
Line 3,827:
median~~ (
<9.3,-2.0,4.0,7.3,8.1,4.1,-6.3,4.2,-1.0,-8.4>,
<8.3,-3.6,5.7,2.3,9.3,5.4,-2.3,6.3,9.9>)</langsyntaxhighlight>
output:
<pre>
Line 3,835:
Requires <code>--pkg posix -X -lm</code> compilation flags in order to use POSIX qsort, and to have access to math library.
 
<langsyntaxhighlight lang=vala>int compare_numbers(void* a_ref, void* b_ref) {
double a = *(double*) a_ref;
double b = *(double*) b_ref;
Line 3,853:
double[] array2 = {2, 4, 6, 1, 7, 3, 5, 8};
print(@"$(median(array1)) $(median(array2))\n");
}</langsyntaxhighlight>
 
=={{header|VBA}}==
{{trans|Phix}}
Uses [[Quickselect_algorithm#VBA|quick select]].
<langsyntaxhighlight lang=vb>Private Function medianq(s As Variant) As Double
Dim res As Double, tmp As Integer
Dim l As Integer, k As Integer
Line 3,875:
s = [{4, 2, 3, 5, 1, 6}]
Debug.Print medianq(s)
End Sub</langsyntaxhighlight>{{out}}
<pre> 3,5 </pre>
 
Line 3,884:
The result is returned in text register @10. In case of even number of items, the lower middle value is returned.
 
<langsyntaxhighlight lang=vedit>Sort(0, File_Size, NOCOLLATE+NORESTORE)
EOF Goto_Line(Cur_Line/2)
Reg_Copy(10, 1)</langsyntaxhighlight>
 
=={{header|Vlang}}==
<langsyntaxhighlight lang=vlang>fn main() {
println(median([3, 1, 4, 1])) // prints 2
println(median([3, 1, 4, 1, 5])) // prints 3
Line 3,903:
}
return m
}</langsyntaxhighlight>
 
{{out}}
Line 3,915:
println(stats.median<int>([1, 1, 3, 4])) // prints 2
println(stats.median<int>([1, 1, 3, 4, 5])) // prints 3
}</langsyntaxhighlight>
 
=={{header|Wortel}}==
<langsyntaxhighlight lang=wortel>@let {
; iterative
med1 &l @let {a @sort l s #a i @/s 2 ?{%%s 2 ~/ 2 +`-i 1 a `i a `i a}}
Line 3,931:
!med2 [4 5 2 1]
]]
}</langsyntaxhighlight>
Returns: <pre>[2 3 2 3]</pre>
 
Line 3,938:
{{libheader|Wren-math}}
{{libheader|Wren-queue}}
<langsyntaxhighlight lang=ecmascript>import "/sort" for Sort, Find
import "/math" for Nums
import "/queue" for PriorityQueue
Line 3,969:
}
System.print()
}</langsyntaxhighlight>
 
{{out}}
Line 3,984:
=={{header|Yabasic}}==
{{trans|Lua}}
<langsyntaxhighlight lang=Yabasic>sub floor(x)
return int(x + .05)
end sub
Line 4,040:
print median("4.1, 5.6, 7.2, 1.7, 9.3, 4.4, 3.2") // 4.4
print median("4.1, 7.2, 1.7, 9.3, 4.4, 3.2") // 4.25
</syntaxhighlight>
</lang>
 
=={{header|zkl}}==
Using the [[Quickselect algorithm#zkl]] for O(n) time:
<langsyntaxhighlight lang=zkl>var quickSelect=Import("quickSelect").qselect;
 
fcn median(xs){
Line 4,050:
if (n.isOdd) return(quickSelect(xs,n/2));
( quickSelect(xs,n/2-1) + quickSelect(xs,n/2) )/2;
}</langsyntaxhighlight>
<langsyntaxhighlight lang=zkl>median(T( 5.1, 2.6, 6.2, 8.8, 4.6, 4.1 )); //-->4.85
median(T( 5.1, 2.6, 8.8, 4.6, 4.1 )); //-->4.6</langsyntaxhighlight>
 
=={{header|Zoea}}==
<langsyntaxhighlight lang=Zoea>
program: median
case: 1
Line 4,066:
input: [2,5,6,8]
output: 5.5
</syntaxhighlight>
</lang>
 
=={{header|Zoea Visual}}==
Line 4,072:
 
=={{header|zonnon}}==
<langsyntaxhighlight lang=zonnon>
module Averages;
 
Line 4,142:
writeln(Median(ary):10:2)
end Averages.
</syntaxhighlight>
</lang>
<pre>
4
10,333

edits