Averages/Median: Difference between revisions
Content added Content deleted
(Initial FutureBasic task solution added) |
|||
Line 2,485: | Line 2,485: | ||
<syntaxhighlight lang="text"> |
<syntaxhighlight lang="text"> |
||
proc quickselect k . list[] res . |
proc quickselect k . list[] res . |
||
# |
# |
||
subr partition |
subr partition |
||
mid = left |
mid = left |
||
for i = left + 1 to right |
for i = left + 1 to right |
||
if list[i] < list[left] |
if list[i] < list[left] |
||
mid += 1 |
mid += 1 |
||
swap list[i] list[mid] |
swap list[i] list[mid] |
||
⚫ | |||
. |
. |
||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
right = len list[] |
|||
while left < right |
|||
⚫ | |||
partition |
|||
⚫ | |||
if mid < k |
|||
left = mid + 1 |
|||
elif mid > k |
|||
right = mid - 1 |
|||
else |
|||
left = right |
|||
else |
|||
. |
|||
. |
|||
⚫ | |||
. |
|||
res = list[k] |
|||
. |
. |
||
proc median . list[] res . |
proc median . list[] res . |
||
h = len list[] div 2 + 1 |
h = len list[] div 2 + 1 |
||
quickselect h list[] res |
|||
if len list[] mod 2 = 0 |
if len list[] mod 2 = 0 |
||
quickselect h - 1 list[] h |
|||
res = (res + h) / 2 |
res = (res + h) / 2 |
||
. |
. |
||
. |
. |
||
test[] = [ 4.1 5.6 7.2 1.7 9.3 4.4 3.2 ] |
test[] = [ 4.1 5.6 7.2 1.7 9.3 4.4 3.2 ] |
||
median test[] med |
|||
print med |
print med |
||
test[] = [ 4.1 7.2 1.7 9.3 4.4 3.2 ] |
test[] = [ 4.1 7.2 1.7 9.3 4.4 3.2 ] |
||
median test[] med |
|||
print med |
print med |
||
</syntaxhighlight> |
</syntaxhighlight> |