Быстрая сортировка - Pascal ABC (12806)
Формулировка задачи:
Переделать так, чтобы числа от 10 до 6555 сортировались по убыванию и записывались в начало массива.
Листинг программы
- procedure QuickSort(mas:mass; first, last: integer);
- var f, l, mid, count: integer;
- begin
- f:=first;
- l:=last;
- mid:=mas[(f+l) div 2]; {вычисление опорного элемента}
- repeat
- while mas[f]<mid do inc(f);
- while mas[l]>mid do dec(l);
- if f<=l then {перестановка элементов}
- begin
- count:=mas[f];
- mas[f]:=mas[l];
- mas[l]:=count;
- inc(f);
- dec(l);
- end;
- until f>l;
- if first<l then QuickSort(mas, first, l);
- if f<last then QuickSort(mas, f, last);
- end;
Решение задачи: «Быстрая сортировка»
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
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д