Averages/Median: Difference between revisions

Content added Content deleted
(add task to aarch64 assembly raspberry pi)
Line 2,208: Line 2,208:
(defun median (list predicate)
(defun median (list predicate)
(select-nth (floor (length list) 2) list predicate))</syntaxhighlight>
(select-nth (floor (length list) 2) list predicate))</syntaxhighlight>

=={{header|Craft Basic}}==
<syntaxhighlight lang="basic">define limit = 10, iterations = 6
define iteration, size, middle, next
define point, top, high, low, pivot

dim list[limit]
dim stack[limit]

for iteration = 1 to iterations

gosub fill
gosub median

next iteration

end

sub fill

print "list: ",

erasearray list

let size = int(rnd * limit) + 1

if size <= 2 then

let size = 3

endif

for i = 0 to size - 1

let list[i] = rnd * 1000 + rnd
print list[i],

gosub printcomma

next i

return

sub median

gosub sort

print newline, "size: ", size, tab,

let middle = int((size - 1)/ 2)
print "middle: ", middle + 1, tab,

if size mod 2 then

print "median: ", list[middle]

else

let next = middle + 1
print "median: ", (list[middle] + list[next]) / 2

endif

print

return

sub sort

let low = 0
let high = size - 1
let top = -1

let top = top + 1
let stack[top] = low
let top = top + 1
let stack[top] = high
do

if top < 0 then

break

endif

let high = stack[top]
let top = top - 1
let low = stack[top]
let top = top - 1

let i = low - 1
for j = low to high - 1

if list[j] <= list[high] then

let i = i + 1
let t = list[i]
let list[i] = list[j]
let list[j] = t

endif

next j

let point = i + 1
let t = list[point]
let list[point] = list[high]
let list[high] = t
let pivot = i + 1

if pivot - 1 > low then

let top = top + 1
let stack[top] = low
let top = top + 1
let stack[top] = pivot - 1

endif
if pivot + 1 < high then

let top = top + 1
let stack[top] = pivot + 1
let top = top + 1
let stack[top] = high

endif

wait

loop top >= 0

print newline, "sorted: ",

for i = 0 to size - 1

print list[i],
gosub printcomma

next i

return

sub printcomma

if i < size - 1 then

print comma, " ",

endif

return</syntaxhighlight>
{{out| Output}}
<pre>
list: 290.66, 870.46, 880.86
sorted: 290.66, 870.46, 880.86
size: 3 middle: 2 median: 870.46

list: 910.91, 50.79, 790.58, 960.61
sorted: 50.79, 790.58, 910.91, 960.61
size: 4 middle: 2 median: 850.74

list: 570.31, 500.16, 490.97, 370.48, 240.18, 880.23, 190.61, 950.19
sorted: 190.61, 240.18, 370.48, 490.97, 500.16, 570.31, 880.23, 950.19
size: 8 middle: 4 median: 495.57

list: 120.87, 570.87, 570.85, 800.27, 200.04, 250.09, 870.04, 200.58, 800.61
sorted: 120.87, 200.04, 200.58, 250.09, 570.85, 570.87, 800.27, 800.61, 870.04
size: 9 middle: 5 median: 570.85

list: 810.33, 760.55, 420.22, 730.64, 350.96
sorted: 350.96, 420.22, 730.64, 760.55, 810.33
size: 5 middle: 3 median: 730.64

list: 40.12, 860.77, 960.29, 920.13
sorted: 40.12, 860.77, 920.13, 960.29
size: 4 middle: 2 median: 890.45
</pre>


=={{header|Crystal}}==
=={{header|Crystal}}==