1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
{ ******************************************************************
Median
****************************************************************** }
unit umedian;
interface
uses
utypes, uqsort;
function Median(X : PVector; Lb, Ub : Integer; Sorted : Boolean) : Float;
{ ------------------------------------------------------------------
Sorts vector X in ascending order (if it's not sorted already)
and returns its median value
------------------------------------------------------------------ }
implementation
function Median(X : PVector; Lb, Ub : Integer; Sorted : Boolean) : Float;
var
N, N2 : Integer;
begin
N := Ub - Lb + 1;
N2 := N div 2 + Lb - 1;
if not Sorted then
QSort(X, Lb, Ub);
if Odd(N) then
Median := X^[N2 + 1]
else
Median := 0.5 * (X^[N2] + X^[N2 + 1]);
end;
end.
|