RosettaCodeData/Task/Averages-Median/BASIC/averages-median.basic
2023-07-01 13:44:08 -04:00

30 lines
684 B
Text

DECLARE FUNCTION median! (vector() AS SINGLE)
DIM vec1(10) AS SINGLE, vec2(11) AS SINGLE, n AS INTEGER
RANDOMIZE TIMER
FOR n = 0 TO 10
vec1(n) = RND * 100
vec2(n) = RND * 100
NEXT
vec2(11) = RND * 100
PRINT median(vec1())
PRINT median(vec2())
FUNCTION median! (vector() AS SINGLE)
DIM lb AS INTEGER, ub AS INTEGER, L0 AS INTEGER
lb = LBOUND(vector)
ub = UBOUND(vector)
REDIM v(lb TO ub) AS SINGLE
FOR L0 = lb TO ub
v(L0) = vector(L0)
NEXT
quicksort v(), lb, ub
IF ((ub - lb + 1) MOD 2) THEN
median = v((ub + lb) / 2)
ELSE
median = (v(INT((ub + lb) / 2)) + v(INT((ub + lb) / 2) + 1)) / 2
END IF
END FUNCTION