func QuickSelect(List, Len, K); int List, Len, K; int Px, Pv, Last, I, J, T; [loop [\\partition Px:= Len/2; Pv:= List(Px); Last:= Len-1; T:= List(Px); List(Px):= List(Last); List(Last):= T; I:= 0; for J:= 0 to Last-1 do [if List(J) < Pv then [T:= List(I); List(I):= List(J); List(J):= T; I:= I+1; ]; ]; \\select if I = K then return Pv; if K < I then Len:= I else [T:= List(I); List(I):= List(Last); List(Last):= T; List:= @List(I+1); Len:= Last - I; K:= K - (I+1); ]; ]; ]; int V, K; [V:= [9, 8, 7, 6, 5, 0, 1, 2, 3, 4]; for K:= 0 to 10-1 do [IntOut(0, QuickSelect(V, 10, K)); ChOut(0, ^ ); ]; ]