Процедура "Быстрой сортировки" - QuickSort
procedure qSort(nStart, nEnd: integer);
var L, R, c, X: integer;
begin
if nStart >= nEnd then Exit;
L:= nStart; R:= nEnd;
X:= A[(L+R) div 2]; { или X:= A[L+random(R-L+1)] }
while L <= R do begin { разделение }
while A[L] < X do L:= L + 1;
while A[R] > X do R:= R - 1;
if L <= R then begin
c:= A[L]; A[L]:= A[R]; A[R]:= c;
L:= L+1; R:= R-1
end
end;
qSort(nStart, R); { рекурсивные вызовы }
qSort(L, nEnd)
end;
