52 lines
846 B
Plaintext
52 lines
846 B
Plaintext
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
|