Averages/Median: Difference between revisions
Content added Content deleted
VincentARM (talk | contribs) (add task to aarch64 assembly raspberry pi) |
Basicgames (talk | contribs) |
||
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}}== |