
- •Лабораторная работа №18. Создание одномерных массивов
- •Пояснения к работе
- •Лабораторная работа №19. Создание одномерных массивов
- •Пояснения к работе
- •Лабораторная работа №20. Создание одномерных массивов
- •Пояснения к работе
- •Лабораторная работа №22. Удаление элементов массива
- •Пояснения к работе
- •Лабораторная работа №21. Перестановка элементов массива
- •Пояснения к работе
- •Лабораторная работа №23. Сортировка массивов
- •Пояснения к работе
- •Лабораторная работа №24. Сортировка массивов
- •Пояснения к работе
- •Лабораторная работа №25. Сортировка массивов
- •Пояснения к работе
Лабораторная работа №25. Сортировка массивов
Цель: Научиться использовать методы сортировки при решении задач
Пояснения к работе
Элементы массива можно сортировать:
- по возрастанию – каждый следующий элемент больше предыдущего а[1]< а[2]< а[3]<… < а[n];
- по неубыванию – каждый следующий элемент не меньше предыдущего, т.е. больше или равен а[1]≤ а[2]≤ а[3]≤… ≤ а[n];
- по убыванию – каждый следующий элемент меньше предыдущего а[1]>а[2]>а[3]>… >а[n];
- по невозрастанию – каждый следующий элемент не больше предыдущего, т.е. меньше или равен а[1]≥ а[2]≥ а[3]≥… ≥ а[n];
Сортировка методом простого обмена:
Этот метод заключается в последовательных просмотрах массива сверху вниз (от начала к концу) и обмене местами соседних элементов, расположенных “неправильно”, то есть таких, что .
Начинаем с первой пары элементов, если а[1]>а[2], то меняем их местами, иначе оставляем без изменения. Затем берем вторую пару элементов (а[2] и а[3]), если а[2]>а[3], то меняем их местами и так далее. На первом шаге будут просмотрены все пары элементов массива и для i от 1 до n-1. В результате максимальный элемент массива переместиться в конец массива. Поскольку саамы большой элемент находится на своем месте, рассмотрим часть массива без него, то есть с первого до (n-1)-го элемента.
Повторим предыдущие действия для (n-1) части массива, в результате чего второй по величине элемент массива переместится на последнее место рассматриваемой части массива, то есть на (n-1)-ое место во всем массиве.
Эти действия продолжают до тех пор, пока количество элементов в текущей части массива не уменьшится до двух. В этом случае необходимо выполнить сравнение и упорядочить последние два элемента.
При сортировке выполняется n-1 просмотр массива, после этого массив отсортирован.
Сортировка методом простого выбора:
Выбрать максимальный элемент массива;
Поменять его местами с последним элементом (после этого самый большой элемент будет стоять на своем месте);
Повторить п.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