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)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