Рассмотрим массив чисел а1,а2,а3,…,аn. Пусть требуется переставить элементы этого массива так, чтобы после перестановки они были упорядочены по неубыванию: а1 а2 … аn. Эта задача называется задачей сортировки массивов или упорядочения массива. Для решения этой задачи можно воспользоваться, например, следующими алгоритмами:
1 Найти элемент массива, имеющий наименьшее значение, переставить его с первым элементом, затем проделать то же самое, начав со второго элемента и т.д. (сортировка выбором).
2 Последовательным просмотром чисел а1,…,аn найти наименьшее i такое, что аi>ai+1. Поменять ai и аi+1 местами, возобновить просмотр с элемента аi+1 и т.д. Тем самым наибольшее число передвинется на последнее место. Следующие просмотры начинать опять сначала, уменьшая на единицу количество просматриваемых элементов (сортировка обменом или методом пузырька).
3 Просматривать последовательно а2,а3,…,аn и каждый новый элемент аi вставлять на подходящее место в уже упорядоченную совокупность а1,а2,а3,...,аi-1. Это место определяется последовательным сравнением аi с упорядоченными элементами а1,а2,...,аi-1 (сортировка вставками).
Если нужно отсортировать часть массива, удовлетворяющую заданным условиям, то вначале отбирают элементы, удовлетворяющие заданному условию, в рабочий массив, а затем его сортируют.
Примеры выполнения задания лабораторной работы
Пример 12. Подсчитать количество положительных элементов в массиве x(10).
Порядок работы:
Шаг 1. Вводим массив x(10).
Шаг 2. Задаем начальное значение количества k = 0.
Шаг 3. Организовываем цикл, который перебирает элементы массива (то есть индекс i), начиная с 1-го и кончая 10-м.
Шаг 4. Если xi > 0, тогда присваиваем k = k + 1.
Шаг 5. Если цикл по i не закончился, идем на начало цикла, то есть на шаг 3.
Шаг 6. Печатаем k.
Шаг 7. Останов.
Пример 13. Найти минимальный элемент из интервала [5,12] в массиве x(15).
Порядок работы:
Шаг 1. Dводим массив x(15).
Шаг 2. Задаем начальное значение минимального элемента xmin=10 20.
Шаг 3. Организовываем цикл, который перебирает элементы массива (то есть индекс i), начиная с 1-го и кончая 15-м.
Шаг 4. Если xi не принадлежит интервалу [5,12], тогда идем на шаг 6.
Шаг 5. Если xi < xmin, тогда присваиваем xmin = xi.
Шаг 6. Если цикл по i не закончился, идем на начало цикла, то есть на шаг 3.
Шаг 7. Печатаем xmin.
Шаг 8. Останов.
Пример 14. Найти максимальный элемент и его номер в массиве x(30) .
Блок-схема
Порядок работы:
Шаг 1. Вводим массив x(30).
Шаг 2. Задаем начальные значения максимального элемента и его номера: xmax = x1, nmax = 1.
Шаг 3. Организовываем цикл, который перебирает элементы массива (то есть индекс i), начиная с 2-го и кончая 30-м.
Шаг 4. Если xi>xmax, тогда присваиваем: xmax=xi, nmax=i.
Шаг 5. Если цикл по i не закончился, идем на начало цикла, то есть на шаг 3.
Шаг 6. Печатаем xmax, nmax.
Шаг 7. Останов.
Пример 15.Найти среднее арифметическое элементов массива Х(20), кратных 3 и принадлежащих интервалу [15,30].
Пример 19. Найти сумму двух наибольших отрицательных элементов массива x(15).
Порядок работы:
Шаг 1. Dводим массив x(15).
Шаг 2. Устанавливаем исходный индекс рабочего массива j=0.
Шаг 3. Организовываем цикл, который перебирает элементы исходного массива (то есть индекс i), начиная с 1-го и кончая 15-м.
Шаг 4. Если xi ³ 0, то идем на шаг 7.
Шаг 5. Устанавливаем индекс следующего элемента рабочего массива j = j + 1.
Шаг 6. Присваиваем элемента рабочего массива значения элемента исходного массива yj = xi.
Шаг 7. Если цикл по i не закончился, идем на начало цикла, то есть на шаг 3.
Шаг 8. Если j < 2, то выдаем сообщения «Массив не сформирован» и идем на шаг 17.
Шаг 9. Организовываем цикл, который определяет количество просмотров рабочего массива (то есть индекс k), начиная с 1-го и кончая j-м.
Шаг 10. Организовываем цикл, определяющий просматриваемую пару чисел рабочего массива (т.е. индекс i), начиная с 1-го и кончая (j-1)-м.
Шаг 11. Если первый элемент не больше второго, то идем на шаг 13.
Шаг 12. Меняем два элемента местами:
c = yi; yi = yi+1; yi+1 = c.
Шаг 13. Если цикл по i не закончился, идем на начало цикла, то есть на шаг 10.
Шаг 14. Если цикл по k не закончился, идем на начало цикла, то есть на шаг 9.
Шаг 15. Вычисляем сумму s = yj + yj-1.
Шаг 16. Печатаем s.
Шаг 17. Останов.
Пример 20.Найти произведение четырех наименьших положительных кратных 5 чисел исходного массива Х(20).
Сначала формируем новый массив из положительных кратных 5 элементов исходного массива, а затем полученный массив сортируем методом выталкивания (пузырька). Программа имеет вид:
program pr20;
uses crt;
LABEL 1;
const n=20;
type raz=1..N; mac=array [raz] of integer;
VAR X,A:MAC; D,I,J,K,R:INTEGER; P:CHAR;
BEGIN CLRSCR; WRITELN('ВВЕДИ ',N,' ЧИСЕЛ');
FOR I:=1 TO N DO READ(X[I]);
WRITELN(' ':20,'ИСХОДНЫЙ МАССИВ');
FOR I:=1 TO N DO WRITE(X[I]:4);
{ ФОРМИРОВАНИЕ НОВОГО МАССИВА }
writeln; j:=0;
for i:= 1 to N do begin
IF (X[I]>0) AND (X[I] MOD 5 = 0) THEN
BEGIN J:=J+1; A[J]:=X[I]; END; END;
IF J=0 THEN WRITELN(' МАССИВ НЕ СФОРМИРОВАН'): GOTO 1;
{ СОРТИРОВКА ПО ВОЗРАСТАНИЮ }
for k:= 1 to j do
for i:= 1 to j-k do
if a[i+1]<a[i] then
BEGIN D:=A[I]; A[I]:=A[I+1]; A[I+1]:=D; END;
WRITELN(' ':5,'ОТСОРТИРОВАННЫЙ МАССИВ');
for i:= 1 to j do write(a[i]:4); writeln;
if j>=4 then begin r:=1;
for i:=1 to 4 do r:=r*a[i];
WRITELN('ПРОИЗВЕДЕНИЕ 4- Х НАИМЕНЬШИХ=',R:6);END
ELSE WRITELN('МАССИВ НЕ СОДЕРЖИТ 4 ПОЛОЖИТЕЛЬНЫХ КРАТНЫХ 5 ЭЛЕМЕНТОВ');