Быстрая сортировка - 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.

Объяснение кода листинга программы

  1. Создается тип данных mass, который представляет собой массив целых чисел размером до 200 элементов.
  2. Создается процедура Forvard, которая принимает на вход массив b, переставляет числа от 10 до 6555 вперед и возвращает новый отсортированный массив. Внутри процедуры используются переменные i, j и x для отслеживания текущего индекса, на котором находится число для перестановки, и для сохранения текущего числа.
  3. Создается процедура QuickSort, которая реализует алгоритм быстрой сортировки. Она принимает на вход массив b, начальный и конечный индексы диапазона, который нужно отсортировать. Внутри процедуры используются переменные f, l, mid и count для отслеживания начального и конечного индексов диапазона, а также для вычисления опорного элемента. Затем происходит рекурсивный вызов процедур QuickSort для сортировки поддиапазонов до тех пор, пока не будет достигнут условие остановки.
  4. Создается переменная a, которая представляет собой массив целых чисел размером n.
  5. Запускается цикл, в котором пользователю предлагается ввести размер массива от 10 до 200.
  6. Заполняется массив a случайными числами от 10 до 7000.
  7. Вызывается процедура Forvard с массивом a, размером n и переменной k, которая будет использоваться для отслеживания индекса последнего переставленного элемента.
  8. Вызывается процедура QuickSort с массивом a, начальным индексом 1 и конечным индексом k.
  9. Выводится отсортированный массив a.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4 из 5