ответ:uses crt;
const SIZE=10;
type MyMassive:ARRAY[1..SIZE] OF INTEGER;
var MyMass:MyMassive;
i:integer;
procedure quickSort(var numbers:MyMassive; left,right:integer);
var
pivot:integer; // разрешающий элемент
begin
l_hold := left; //левая граница
r_hold := right; // правая граница
pivot := numbers[left];
while (left < right) do // пока границы не сомкнутся
while ((numbers[right] <= pivot) and (left < right)) do
dec(right); // сдвигаем правую границу пока элемент [right] больше [pivot]
if NOT (left = right) then // если границы не сомкнулись
numbers[left] := numbers[right]; // перемещаем элемент [right] на место разрешающего
Inc(left); // сдвигаем левую границу вправо
end;
while ((numbers[left] >= pivot) AND (left < right)) do
Inc(left); // сдвигаем левую границу пока элемент [left] меньше [pivot]
if NOT (left = right) then// если границы не сомкнулись
numbers[right] := numbers[left]; // перемещаем элемент [left] на место [right]
Dec(right); // сдвигаем правую границу вправо
numbers[left] := pivot; // ставим разрешающий элемент на место
pivot := left;
left := l_hold;
right := r_hold;
if (left < pivot) then// Рекурсивно вызываем сортировку для левой и правой части массива
quickSort(numbers, left, pivot - 1);
if (right > pivot) then
quickSort(numbers, pivot + 1, right);
End;
clrscr;
writeln('первоначальное заполнение массива:');
for i:=1 To SIZE do
MyMass[i]:=Trunc(random(20))-10;
write(' ',MyMass[i]);
writeln;
quickSort(MyMass, 1, SIZE);
writeln('результат:');
for i = 1 to SIZE do write(' ',MyMass[i]);
readkey();
end.
Объяснение:
ответ:uses crt;
const SIZE=10;
type MyMassive:ARRAY[1..SIZE] OF INTEGER;
var MyMass:MyMassive;
i:integer;
procedure quickSort(var numbers:MyMassive; left,right:integer);
var
pivot:integer; // разрешающий элемент
begin
l_hold := left; //левая граница
r_hold := right; // правая граница
pivot := numbers[left];
while (left < right) do // пока границы не сомкнутся
begin
while ((numbers[right] <= pivot) and (left < right)) do
dec(right); // сдвигаем правую границу пока элемент [right] больше [pivot]
if NOT (left = right) then // если границы не сомкнулись
begin
numbers[left] := numbers[right]; // перемещаем элемент [right] на место разрешающего
Inc(left); // сдвигаем левую границу вправо
end;
while ((numbers[left] >= pivot) AND (left < right)) do
Inc(left); // сдвигаем левую границу пока элемент [left] меньше [pivot]
if NOT (left = right) then// если границы не сомкнулись
begin
numbers[right] := numbers[left]; // перемещаем элемент [left] на место [right]
Dec(right); // сдвигаем правую границу вправо
end;
end;
numbers[left] := pivot; // ставим разрешающий элемент на место
pivot := left;
left := l_hold;
right := r_hold;
if (left < pivot) then// Рекурсивно вызываем сортировку для левой и правой части массива
quickSort(numbers, left, pivot - 1);
if (right > pivot) then
quickSort(numbers, pivot + 1, right);
End;
begin
clrscr;
writeln('первоначальное заполнение массива:');
for i:=1 To SIZE do
begin
MyMass[i]:=Trunc(random(20))-10;
write(' ',MyMass[i]);
end;
writeln;
quickSort(MyMass, 1, SIZE);
writeln('результат:');
for i = 1 to SIZE do write(' ',MyMass[i]);
writeln;
readkey();
end.
Объяснение: