Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Teoria_Algoritmizatsia.docx
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
334.07 Кб
Скачать

Лабораторная работа №25. Сортировка массивов

Цель: Научиться использовать методы сортировки при решении задач

Пояснения к работе

Элементы массива можно сортировать:

- по возрастанию – каждый следующий элемент больше предыдущего а[1]< а[2]< а[3]<… < а[n];

- по неубыванию – каждый следующий элемент не меньше предыдущего, т.е. больше или равен а[1]≤ а[2]≤ а[3]≤… ≤ а[n];

- по убыванию – каждый следующий элемент меньше предыдущего а[1]>а[2]>а[3]>… >а[n];

- по невозрастанию – каждый следующий элемент не больше предыдущего, т.е. меньше или равен а[1]≥ а[2]≥ а[3]≥… ≥ а[n];

Сортировка методом простого обмена:

Этот метод заключается в последовательных просмотрах массива сверху вниз (от начала к концу) и обмене местами соседних элементов, расположенных “неправильно”, то есть таких, что .

  1. Начинаем с первой пары элементов, если а[1]>а[2], то меняем их местами, иначе оставляем без изменения. Затем берем вторую пару элементов (а[2] и а[3]), если а[2]>а[3], то меняем их местами и так далее. На первом шаге будут просмотрены все пары элементов массива и для i от 1 до n-1. В результате максимальный элемент массива переместиться в конец массива. Поскольку саамы большой элемент находится на своем месте, рассмотрим часть массива без него, то есть с первого до (n-1)-го элемента.

  2. Повторим предыдущие действия для (n-1) части массива, в результате чего второй по величине элемент массива переместится на последнее место рассматриваемой части массива, то есть на (n-1)-ое место во всем массиве.

  3. Эти действия продолжают до тех пор, пока количество элементов в текущей части массива не уменьшится до двух. В этом случае необходимо выполнить сравнение и упорядочить последние два элемента.

При сортировке выполняется n-1 просмотр массива, после этого массив отсортирован.

Сортировка методом простого выбора:

  1. Выбрать максимальный элемент массива;

  2. Поменять его местами с последним элементом (после этого самый большой элемент будет стоять на своем месте);

  3. Повторить п.1-2 с оставшимися n-1 элементами, то есть рассмотреть часть массива, начиная с первого элемента до предпоследнего, найти в ней максимальный элемент и поменять его местами с предпоследним n-1 элементом массива, затем оставшимися n-2 элементами и так далее, пока не останется один самый маленький элемент, уже стоящий на своем месте.

Всего потребуется n-1 раз выполнить эту последовательность действий.

Сортировка методом прямого включения:

Сортировка этим методом производится последовательно шаг за шагом. Например, для сортировки по возрастанию: на k-ом шаге считается, что часть массива, содержащая первые k-1 элемент уже упорядочена, то есть а[1]< а[2]< а[3]<… < а[k-1]. Далее необходимо взять k-ый элемент и подобрать для него место в отсортированной части массива такое, чтобы после его вставки упорядоченность не нарушилась, то есть а[j]< а[k]< а[j+1].Затем надо вставить элемент а[k] на найденное место.

С каждым шагом отсортированная часть массива увеличивается. Для выполнения полной сортировки потребуется выполнить n-1 шаг.

2)program Derf;Uses CRT;

const n=8;

type omas=array [1..n] of integer;

var

a:Omas;

Procedure Init(var z:Omas);

var i:byte;

begin

for i:=1 to n do

readln(z[i]);

end;

Procedure Print(var z:Omas);

var i:byte;

begin

for i:=1 to n do

Write('z[',i,']=',z[i],' ');

Writeln;

end;

Procedure Sortirovka(var z:omas);

var

i,j,k:byte;m:integer;

begin

for i:=n downto 2 do if (i mod 2=0) then begin

begin

k:=i;m:=z[i];

for j:=1 to i-1 do

if ((j mod 2=0) and (z[j]>m) and (z[j]>0)) then

begin

k:=j;

m:=z[k];

end;

if k<>i then begin

z[k]:=z[i];

z[i]:=m;

end;

end;

end;

end;

begin

Writeln('Введите массив:');

Init(a);Writeln;Print(a);

Writeln('Отсортированный массив:');

Sortirovka(a);Print(a);

end.

Рисунок 1 – задача 1

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]