- •Некоторые типичные действия с массивами.
- •Вывод массива.
- •Ввод массива.
- •Вот пример результата работы программы:
- •Сортировка массива.
- •Сортировка методом прямого выбора
- •Пример работы программы:
- •Сортировка методом прямого обмена.
- •Пример работы программы.
- •Поиск в массиве.
- •Пример работы программы
- •Поиск минимального (максимального) элемента массива.
- •Многомерные массивы.
- •Пример работы программы:
- •Ошибки при использовании массивов
- •Задания:
Сортировка методом прямого выбора
Алгоритм сортировки массива по возрастанию методом прямого выбора может быть представлен так:
1. Просматривая массив от первого элемента, найти минимальный и поместить его на место первого элемента, а первый на место минимального.
2. Просматривая массив от второго элемента, найти минимальный и поместить его на место второго элемента, а второй на место минимального.
3. И так далее до предпоследнего элемента.
Ниже представлена программа сортировки массива целых чисел по возрастанию. Для демонстрации процесса сортировки программа выводит массив после каждого обмена элементов.
const
size = 5;
var
a : array [1..size] of integer;
i : integer; { номер элемента, от которого ведется поиск }
{ минимального элемента }
min : integer; { номер минимального элемента в части }
{ массива от i до верхней границы массива }
j : integer; { номер элемента, сравниваемого с минимальным }
buf : integer; { буфер, используемый при обмене эл-тов массива}
k: integer;
begin
writeln ( ‘ Сортировка массива.’ );
write ( ‘ Введите ’,size : 3, ‘ целых в одной строке ’ );
writeln ( ‘ через пробел и нажмите < ENTER >’);
for k :=1 to size do read (a [k] );
writeln (‘ Сортировка ’);
for i :=1 to size — 1 do
begin
{ поиск минимального элемента в части массива от a [i ] до a [ size ] }
min := i ;
for j :=i + 1 to size do begin
if a [j] < [min] then min := j;
{ поменяем местами a [min] и a[i] }
buf := a [i];
a [i] := a [min];
a [min] :=buf ;
{ введем массив }
for k := 1 to size do write ( a [k] , ‘ ’ ) ;
writeln;
end;
end;
writeln (‘ Массив отсортирован.’ ) ;
end.
Пример работы программы:
Сортировка массива.
Введите 5 целых в одной строке через пробел и нажмите < ENTER >
12 -3 56 47 10
Сортировка
-3 12 56 47 10
-3 10 56 47 12
-3 10 12 47 56
-3 10 12 47 56
Массив отсортирован.
Сортировка методом прямого обмена.
В основе алгоритма лежит обмен соседних элементов массива. Каждый элемент массива, начиная с первого, сравнивается со следующим и если он больше следующего, то элементы меняются местами. Таким образом, элементы с меньшим значением продвигаются к началу массива (всплывают), а элементы с большим значением — к концу массива (тонут), поэтому этот метод иногда называют “пузырьковым”. Этот процесс повторяется на единицу меньше раз, чем элементов в массиве.
На рис.1 показан пример процесса сортировки массива. Буквой (“а”) обозначено исходное состояние массива и перестановки на первом проходе, буквой (“б”) — состояние после перестановок на первом проходе и перестановки на втором проходе и так далее.
|
|
|
|
|
|
|
|
|
|
|
|
|
i=1 |
3 |
|
2 |
|
2 |
|
2 |
|
1 |
|
|
|
i=2 |
2 |
|
3 |
|
3 |
|
1 |
|
2 |
|
|
|
i=3 |
4 |
|
4 |
|
1 |
|
3 |
|
3 |
|
|
|
i=4 |
5 |
|
1 |
|
4 |
|
4 |
|
4 |
|
|
|
i=5 |
1 |
|
5 |
|
5 |
|
5 |
|
5 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
а |
|
б |
|
в |
|
г |
|
д |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Рис. 1. Процесс сортировки массива.
Ниже представлена программа сортировки массива целых чисел по возрастанию. Для демонстрации процесса сортировки программа выводит массив после каждого цикла обменов.
const
SIZE=5;
var
a: array [1..size] of integer;
i: integer; { счетчик циклов }
k: integer; { текущий индекс элемента массива }
buf: integer;
begin
writeln (‘ Сортировка массива пузырьковым методом.’);
writeln (‘ Введите’,size:3,’ целых в одной строке через пробел ’);
writeln (‘ и нажмите <Enter> ’);
for k:=1 to size do read(a[k]);
writeln (‘ Сортировка.’);
for i:=1 to size-1
do begin
for k:=1 to size-1
do begin
if a[k]>a[k+1]
then begin
{ обменяем к-й и (к+1)-й элементы }
buf:=a[k];
a[k]:=a[k+1];
a[k+1]:=buf;
end;
end;
for k:=1 to size do writeln(a[k], ‘ ’);
writeln;
end;
writeln(‘ Массив отсортирован.’);
end;