(phixonline)-->
sequence s = {9, 8, 7, 6, 5, 0, 1, 2, 3, 4}
function quick_select(integer k)
integer left = 1, right = length(s)
while left<right do
object pivotv = s[k];
{s[k], s[right]} = {s[right], s[k]}
integer pos = left
for i=left to right do
if s[i]<pivotv then
{s[i], s[pos]} = {s[pos], s[i]}
pos += 1
end if
end for
{s[right], s[pos]} = {s[pos], s[right]}
if pos==k then exit end if
if pos<k then
left = pos + 1
else
right = pos - 1
end if
end while
return s[k]
end function
for i=1 to 10 do
integer r = quick_select(i)
printf(1," %d",r)
end for
{} = wait_key()