Поиск максимального элемента в массиве А с запоминанием индекса

Нахождение максимального элемента массива выполняется в цикле, сравнивая значение текущего элемента с наибольшим из всех предыдущих значений. Если значение текущего элемента массива окажется больше максимального из предыдущих, то его надо считать новым максимальным значением. В противном случае максимальное сохраняет своё старое значение. Соответственно изменяется на текущее или остается прежним значение индекса максимального элемента.

В качестве начального значения максимального элемента искомой переменной МАХ присваивается значение первого элемента в массиве, а переменной NUM значение 1.

Используемые переменные:

Исходные данные:

N – количество элементов в массиве

А – текущий массив размером N

Результат:

MAX – значение максимального элемента

NUM – индекс максимального элемента

Вспомогательные переменные:

I – индекс элемента массива

Схема алгоритма изображена на рис.9.

Программный код:

MAX:= A[1]; NUM:= 1;

FOR I:= 1 TO N DO IF A[I] > MAX THEN begin MAX:= A[I]; NUM:= I; end;

10) Поиск заданного элемента в массиве.

Определить, есть ли в заданном массиве, состоящем из N элементов, элемент, равный L.

В цикле последовательно сравниваются элементы с заданным значением L. Если условие выполняется, изменяются значения переменных FLAG и NUM и про­исходит досрочный выход из цикла.

После выхода из цикла проверяется значение переменных FLAG. Если ее зна­чение изменилось в ходе выполнения цикла, на печать выводится порядковый номер искомого элемента, в противном случае сообщение: “Элемента равного L нет”.

Используемые переменные:

Исходные данные:

N – количество элементов массива

L – значение, которое ищется в массиве

А[I] – массив размером N

Результат:

R$ - строковая переменная, для вывода сообщения «Элемента равного L нет»

NUM – порядковый номер искомого элемента

Вспомогательные переменные:

FLAG – переменная-признак, которая изменяет свое значение, если элемент найден.

Программный код:

FLAG:= 0;

R$:= ‘Элемента равного L нет’

FOR I:= 1 TO N DO

IF А[I]:= L THEN begin

FLAG:= 1; NUM:= I; Continue;

end;

IF FLAG = 1 THEN begin

Writeln (‘Элемент равный’, L, ‘в массиве есть’);

Writeln (‘Его порядковый номер’, NUM);

End

ELSE Writeln (R$);

11) Упорядочивание массива.

Задача упорядочения элементов массива (сортировка) по возрастанию или по убыванию – одна из наиболее интересных и широко изучаемых проблем в программировании.

Существует несколько методов сортировки. Ниже рассматривается два метода, которые производят сортировку массива в оперативной памяти.

Процесс сортировки заключается в сравнении двух элементов, выбранных некоторым образом из массива. Если они находятся не в отсортированном порядке относительно друг друга, то они меняются местами. Рассматриваемые алгоритмы раз­личаются только процедурой выбора элементов для сравнения. Происходит обращение (для сравнивания и для обмена) по индексу к выбранным элементам.

Рассмотрим сортировку элементов массива по возрастанию двумя методами.

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

1) В сортируемом массиве находят минимальный элемент и обменивают местами с элементом в начале массива

2) Остаток массива далее рассматривается как самостоятельный массив, в нем производится поиск наименьшего, и он меняется местами с первым элементом упорядоченного массива

3) Повторять 2), до тех пор, пока рассматриваемый массив не укоротится до одного элемента

4) Если длина массива N, то вся сортировка требует N-1 проходов по массиву.

Используемые переменные:

Исходные данные:

A – исходный массив размером N

N – размер массива

Результат:

A – массив размером N, упорядоченный по возрастанию

Вспомогательные переменные:

MIN – переменная для хранения промежуточного значения минимального элемента

K – индекс минимального элемента

I – индекс элемента массива

J –индекс элемента части массива, в которой имеется минимальный эле­мент

Схема алгоритма изображена на рис.11.

Программный код:

FOR I:= 1 TO N-1 DO begin

MIN:= A[I)];

For J:= I+1 to N do

If A[J] >= MIN THEN begin MIN:= A[J]; K:= J; end;

A[K]:= A(I); A[I] = MIN;

End;

Второй метод: Пузырьковая сортировка с признаком.

Обмен элементов в массиве производится между двумя соседними элементами массива.

После завершения первого прохода самый «тяжелый» элемент «падает» в нижний элемент.

«Легкие» значения медленно «всплывают» вверх как пузырьки, за один проход «легкое» данное не может подняться больше чем на один элемент.

Достаточное число проходов приведет к полной сортировке, если при проходе не было сделано ни одной перестановки, значит массив упорядочен. Для этого перед началом просмотра нужно установить признак, показывающий, что перестановок не было, т.е. переменной FLAG присваивается значение 0. Если перестановка производилась, переменная FLAG изменит своё значение на 1. Если в конце прохода FLAG останется равным 0, дальнейшие проходы не нужны, массив отсортирован.

Используемые переменные:

Исходные данные:

A – исходный массив размером N

N – размер массива

Результат:

А – массив размером N, упорядоченный по возрастанию

Вспомогательные переменные:

I – индекс элемента массива

FLAG – переменная-признак, изменяющая значение, если сделана перестановка

Схема алгоритма изображена на рис.12

Программный код:

FLAG:= 1;

WHILE FLAG <>0 do begin

FLAG:= 0;

FOR I=1 TO N-1 do

IF A[I] > A[I+1] THEN begin H:= A[I]; A[I]:= A[I+1]; A[I+1]:= H; FLAG:= 1; End;

End;


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: