АЛГОРИТМЫ СОРТИРОВКИ

Простейшая задача сортировки заключается в упорядочении элементов массива по возрастанию или убыванию. Другой задачей является упорядочение элементов массива в соответствии с некоторым критерием. Обычно в качестве такого критерия выступают значения определенной функции, аргументами которой выступают элементы массива. Эту функцию принято называть упорядочивающей функцией.

Существуют различные методы сортировки. Будем рассматривать каждый из методов на примере задачи сортировки по возрастанию массива из N целых чисел.

 Сортировка массива пузырьковым методом.

В разделе описания данных задается массив размерностью 20 ячеек:

a:array [1..20] of integer;

Исходный массив заполняется через цикл с заданным числом повторений при помощи оператора случайных чисел:

for i:=1 to 20 do

a[i]:=random(10);

Если будем пробегать по длине массива от первого до последнего for i:=1 to 20 do, то сравнивая каждый раз величины рядом стоящих элементов if a[i]<a[i+1] then и меняя их местами в случае истинности условия p:=a[i]; a[i]:=a[i+1]; a[i+1]:=p; получим упорядоченный массив. Перебора за один раз недостаточно для того чтобы весь массив упорядочить. Необходимо установить признак завершения работы f который будет принимать значение f:=0 каждый раз перед упорядочиванием массива. Если свершается одна перестановка признак (флаг) переходит в состояние 1. Так будет повторяться до тех пор пока во время прохождения по массиву не произойдет ни одной замены и переменная f не останется в 0 состоянии.

 

program sortirovrk_puzir;

var

a:array [1..20] of integer;

i,f,p:word;

begin

заполнение массива

for i:=1 to 20 do

a[i]:=random(10);

вывод на монитор массива до обработки

write ('массив до обработки');

writeln;

for i:=1 to 20 do

write (a[i]);

сортировка массива

f:=1;

while f=1 do begin

f:=0;

for i:=1 to 19 do

if a[i]<a[i+1] then begin

p:=a[i];

a[i]:=a[i+1];

a[i+1]:=p;

f:=1 ;

end;

end;

вывод массива после сортировки writeln;

write('массив после обработки'); writeln;

for i:=1 to 20 do

write(a[i]);

end.