Быстрая сортировка - 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
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д