Быстрая сортировка - Pascal ABC (12806)
Формулировка задачи:
Переделать так, чтобы числа от 10 до 6555 сортировались по убыванию и записывались в начало массива.
Решение задачи: «Быстрая сортировка»
textual
Листинг программы
type mass=array[1..200] of integer;
//перестановка чисел от 10 до 6555 вперед
procedure Forvard(var b:mass;m:integer;var k:integer);
var i,j,x:integer;
begin
k:=0;
for i:=1 to m do
if (b[i]>=10)and(b[i]<=6555)then
begin
k:=k+1;
x:=b[i];
for j:=i downto k+1 do
b[j]:=b[j-1];
b[k]:=x;
end;
end;
//быстрая сортировка первых К чисел
procedure QuickSort(var b:mass; first, last: integer);
var f, l, mid, count: integer;
begin
f:=first;
l:=last;
mid:=b[(f+l) div 2]; {вычисление опорного элемента}
repeat
while b[f]>mid do inc(f);
while b[l]<mid do dec(l);
if f<=l then {перестановка элементов}
begin
count:=b[f];
b[f]:=b[l];
b[l]:=count;
inc(f);
dec(l);
end;
until f>l;
if first<l then QuickSort(b, first, l);
if f<last then QuickSort(b, f, last);
end;
var a:mass;
n,k,i:integer;
begin
randomize;
repeat
write('Введите размер массива от 10 до 200 n=');
readln(n);
until n in [10..200];
writeln('Исходный масссив');
for i:=1 to n do
begin
a[i]:=random(7000);
write(a[i]:5);
end;
writeln;
Forvard(a,n,k);
QuickSort(a,1,k);
writeln('Отсортированный массив');
for i:=1 to n do
write(a[i]:5);
end.
Объяснение кода листинга программы
- Создается тип данных
mass, который представляет собой массив целых чисел размером до 200 элементов. - Создается процедура
Forvard, которая принимает на вход массивb, переставляет числа от 10 до 6555 вперед и возвращает новый отсортированный массив. Внутри процедуры используются переменныеi,jиxдля отслеживания текущего индекса, на котором находится число для перестановки, и для сохранения текущего числа. - Создается процедура
QuickSort, которая реализует алгоритм быстрой сортировки. Она принимает на вход массивb, начальный и конечный индексы диапазона, который нужно отсортировать. Внутри процедуры используются переменныеf,l,midиcountдля отслеживания начального и конечного индексов диапазона, а также для вычисления опорного элемента. Затем происходит рекурсивный вызов процедурQuickSortдля сортировки поддиапазонов до тех пор, пока не будет достигнут условие остановки. - Создается переменная
a, которая представляет собой массив целых чисел размеромn. - Запускается цикл, в котором пользователю предлагается ввести размер массива от 10 до 200.
- Заполняется массив
aслучайными числами от 10 до 7000. - Вызывается процедура
Forvardс массивомa, размеромnи переменнойk, которая будет использоваться для отслеживания индекса последнего переставленного элемента. - Вызывается процедура
QuickSortс массивомa, начальным индексом1и конечным индексомk. - Выводится отсортированный массив
a.