Program QuickSort; Var Pole:Array[1..11] of Integer; j:Integer; Procedure Vloz1(Na,Co:Integer;Var IP:Integer); Var i,Zal:Integer; Begin inc(IP); Zal:=Pole[Co]; For i:=Co downto Na+1 do Pole[i]:=Pole[i-1]; Pole[Na]:=Zal; End; Procedure Vloz2(Na,Co:Integer;Var IP:Integer); Var i,Zal:Integer; Begin dec(IP); Zal:=Pole[Co]; For i:=Co to Na-1 do Pole[i]:=Pole[i+1]; Pole[Na]:=Zal; End; Procedure Zarad(Start,Konec:Integer); Var A,B,IP,i,X,Zal,Pivot:Integer; Begin A:=Start; B:=Konec; IP:=Trunc((A+B)/2); Pivot:=Pole[IP]; While not(A=B) do Begin While not(A=IP) and not(Pole[A]>Pivot) do INC(A); While not(B=IP) and not(Pole[B]IP) and (B<>IP) Then Begin X:=Pole[A]; Pole[A]:=Pole[B]; Pole[B]:=X; End; IF A<>B Then Begin IF A=IP Then Vloz1(A,B,IP); IF B=IP Then Vloz2(B,A,IP); End; Zarad(Start,IP-1); Zarad(IP+1,Konec); End; End; Begin For j:=1 to 11 do Pole[j]:=Random(30); Zarad(1,11); For j:=1 to 11 do Write(Pole[j],' '); End.