Название: Алгоритмическое мышление при решении задач (Шамшев А. Б.)

Жанр: Информационные системы и технологии

Просмотров: 1394


Задача 2: найти индекс максимального значения в массиве.

Рассуждения:

1.  Надо найти максимальное значение в массиве. Очевидно, что результом является индекс одного из элементов массива. Из этого вытекает то, что ответ должен лежать в диапазоне от 0 включая до размера массива не включая. Поэтому в алгоритме появляется переменная, отвечающая за результат, в которой будет храниться индекс максимального элемента, т. е. переменная целочисленного типа.

2.  Возьмем конкретные данные для того, что бы лучше понять алгоритм работы.   Пусть   массив   имеет   название   data   и   содержит   данные

(1,5,1,7,9,2),  т. е.  6  элементов.  Как  человек  ищет  максимальное  из чисел? В начале он берет единицу, потому что это первый элемент,

который есть в массиве (с индексом 0). Потом единицу сравнивает со вторым элементом массива (пятью). Пять больше единицы, поэтому как ответ  он  запоминает  пять,  «забывая»  при  этом  единицу.  Потом  он

сравнивает 5 и 1 (которая имеет индекс в массиве равный 2). 5 больше единицы, поэтому он переходит к следующему элементу. Потом 5 человек сравнивает с 7. 7 больше, поэтому он запоминает 7, при этом

забывая 5. Потом 7 сравнивает с 9. 9 больше 7, поэтому он запоминает

9. Потом 9 сравнивает с 2, 2 меньше 9, поэтому он не запоминает 2.

Таким образом получается, что максимальный элемент равен 9.

3.  Запишем алгоритм в псевдокоде

 

Запомнить первое подходящее значение массива как результат Для каждого элемента массива (кроме того, который запомнили) НачалоЦикла

Если тек. элемент массива больше результата, то

НачалоЕсли

Запомнить текущий элемент как результат.

ОкончаниеЕсли

ОкончаниеЦикла

 

4.  Обратите  внимание  на  первое  действие  в  псевдокоде  –  запомнить первое подходящее значение массива как результат. Очевидно, что когда мы рассматривали конкретные данные во 2 пункте, когда человек первым действием брал единицу, это условие (подходящее значение) автоматически выполнялось.

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

 

Запомнить первое подходящее значение индекса массива как результат. Пусть эта переменная называется результат

 

Для каждого индекса в массиве (кроме того, который запомнили)

 

НачалоЦикла

Если элемент с тек. индексом больше элемента с индексом результата, то

НачалоЕсли

Запомнить текущий индекс как результат.

ОкончаниеЕсли

ОкончаниеЦикла

 

6.  В виде кодов эта реализация дольно проста.

int[] data = new int[] { 2, 4, 7, 5, -1, 7, 3, -8 };

int maxIndex = 0;

for (int i = 1; i < data.Length;i++ ) {

if (data[i] > data[maxIndex]) {

maxIndex = i;

}

}

//data[maxIndex] - максимальное значение  массива

//maxIndex - позиция максимального значения  в  массиве