Quickselect algorithm: Difference between revisions

Added solution for Action!
(Quickselect algorithm en FreeBASIC)
(Added solution for Action!)
Line 56:
<pre>
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
</pre>
 
=={{header|Action!}}==
<lang Action!>PROC Swap(BYTE ARRAY tab INT i,j)
BYTE tmp
 
tmp=tab(i) tab(i)=tab(j) tab(j)=tmp
RETURN
 
BYTE FUNC QuickSelect(BYTE ARRAY tab INT count,index)
INT px,i,j,k
BYTE pv
 
DO
px=count/2
pv=tab(px)
Swap(tab,px,count-1)
i=0
FOR j=0 TO count-2
DO
IF tab(j)<pv THEN
Swap(tab,i,j)
i==+1
FI
OD
 
IF i=index THEN
RETURN (pv)
ELSEIF i>index THEN
;left part of tab from 0 to i-1
count=i
ELSE
Swap(tab,i,count-1)
;right part of tab from i+1 to count-1
tab==+(i+1)
count==-(i+1)
index==-(i+1)
FI
OD
RETURN (0)
 
PROC Main()
DEFINE COUNT="10"
BYTE ARRAY data=[9 8 7 6 5 0 1 2 3 4],tab(COUNT)
BYTE i,res
 
FOR i=0 TO COUNT-1
DO
MoveBlock(tab,data,COUNT)
res=QuickSelect(tab,COUNT,i)
PrintB(res) Put(32)
OD
RETURN</lang>
{{out}}
[https://gitlab.com/amarok8bit/action-rosetta-code/-/raw/master/images/Quickselect_algorithm.png Screenshot from Atari 8-bit computer]
<pre>
0 1 2 3 4 5 6 7 8 9
</pre>
 
Anonymous user