Поиск элемента по заданному значению
Рассмотрим два алгоритма поиска заданного элемента k в массиве mas из N элементов. Результатом поиска может быть одно из двух: либо поиск завершится успешно, и элемент k в массиве найден, либо поиск окажется неудачным, и элемент k не найден. Для хранения индекса найденного элемента будет использоваться целая переменная ind, которая в случае успешного поиска будет содержать индекс, в противном случае -значение -1.
Последовательный поиск
В данном алгоритме последовательно просматривается весь массив. Начинаем поиск с начала массива и продолжаем до конца, пока не будет найден искомый элемент; затем останавливаемся. Если элемент найден, то переменной ind присваиваем номер этого элемента.
#include "iostream" int main()
{
const int N = 9;
int k, ind, i;
//задание значений элементов массива
int mas[N] = {420, 79, 429, 53, 908, 140, 897, 594, 682};
cout << "Введите значение для поиска: ";
cin >> k;
//поиск значения k в массивеind = -1;
for (i = 0; i < N; i++)
if (mas[i] == k)
{
ind = i;
break;
}
//вывод результата поиска
if (ind < 0)
cout << "Искомое значение в массиве не найдено!\n";
else
cout << " Искомый элемент mas[" << ind << "] = " << mas[ind] << "\n";
return 0;
}
Бинарный поиск
Если массив упорядочен, то можно использовать более эффективный алгоритм поиска, например, бинарный поиск (или метод деления пополам). Обозначим через l - левую границу поиска, r - правую границу поиска и sr -индекс элемента, находящегося в середине массива. Сравним искомый элемент k со средним элементом a[sr]. Если они совпадают, то поиск завершен успешно и местоположение определено. Если искомый элемент больше, то берем правую половину массива (элементы с индексами от sr + 1 до r); если меньше - то левую (элементы с индексами от l до sr - 1). Процесс повторяется до тех пор, пока не будет найден нужный элемент или диапазон поиска не будет исчерпан.
#include "iostream" int main()
{
const int N = 9;
int k, l, r, sr, ind;
//задание значений элементов массива
int mas[N] = {53, 79, 140, 420, 429, 594, 682, 897, 908};
cout << "Введите значение для поиска: ";
cin >> k;
//поиск значения k в массиве
ind = -1;
l = 0;
r = N - 1;
while ( l <= r)
{
sr = (l + r) / 2;
if (mas[sr] == k) { ind = sr; break;}
if (mas[sr] < k) l = sr + 1;
else r = sr - 1;
}
//вывод результата поиска
if (ind < 0) cout << "Искомое значение в массиве не найдено!\n";
else cout << "Искомый элемент mas[" << ind << "] = " << mas[ind] << "\n";
return 0;
}
Пример процесса бинарного поиска элемента 594 в упорядоченном массиве из девяти элементов {53, 79, 140, 420, 429, 594, 682, 897, 908} приведен на рис. 5. Скобки показывают границы просмотра (элементы с индексами от l до r), а подчеркнутое число - середину этого участка массива (элемент с индексом sr).
Рис. 5. Пример бинарного поиска элемента в массиве Контрольная работа «ОДНОМЕРНЫЕ МАССИВЫ»
Вариант 1
Написать программу работы с одномерным массивом из 15 целых элементов для решения задач:
вычислить сумму отрицательных элементов массива;
вычислить произведение элементов массива, расположенных между максимальным и минимальным элементами;
отсортировать массив по убыванию методом выбора.
Вариант 2
Написать программу работы с одномерным массивом из 15 вещественных элементов для решения задач:
вычислить сумму положительных элементов массива;
вычислить произведение элементов массива, расположенных между максимальным по модулю и минимальным по модулю элементами;
отсортировать массив по возрастанию методом выбора
.Вариант 3
Написать программу работы с одномерным массивом из 15 целых элементов для решения задач:
упорядочить при вводе элементы массива по возрастанию методом простой вставки;
выполнить бинарным методом поиск в массиве введенного пользователем значения и вывести его индекс на экран;
вычислить сумму элементов массива, расположенных между первым и последним положительными элементами.
Вариант 4
Написать программу работы с одномерным массивом из 15 вещественных элементов для решения задач:
вычислить произведение элементов массива с четными номерами;
вычислить сумму элементов массива, расположенных между первым и последним отрицательными элементами;
отсортировать массив по убыванию методом "пузырька".
Вариант 5
Написать программу работы с одномерным массивом из 15 целых элементов для решения задач:
вычислить сумму элементов массива с нечетными номерами;
отсортировать массив по возрастанию методом "пузырька";
выполнить бинарным методом поиск в массиве введенного пользователем значения.
Вариант 6
Написать программу работы с одномерным массивом из 15 вещественных элементов для решения задач:
найти максимальный элемент массива;
подсчитать количество элементов массива, лежащих в диапазоне от R1 до R2, вводимых пользователем;
отсортировать массив по возрастанию методом "пузырька".
Вариант 7
Написать программу работы с одномерным массивом из 15 целых элементов для решения задач:
найти минимальный элемент массива;
вычислить сумму элементов массива, расположенных между первым и последним нулевыми элементами;
3) отсортировать массив по убыванию методом выбора.
Вариант 8
Написать программу работы с одномерным массивом из 15 вещественных элементов для решения задач:
найти максимальный по модулю элемент массива;
вычислить сумму элементов массива, расположенных после первого положительного элемента;
отсортировать массив по возрастанию методом выбора.
Вариант 9
Написать программу работы с одномерным массивом из 15 целых элементов для решения задач:
упорядочить при вводе элементы массива по убыванию методом простой вставки;
найти методом последовательного поиска в массиве введенное пользователем значение и вывести его индекс на экран;
вычислить сумму модулей элементов массива, расположенных после последнего отрицательного элемента.
Вариант 10
Написать программу работы с одномерным массивом из 15 вещественных элементов для решения задач:
найти индекс максимального по модулю элемента массива;
вычислить сумму элементов массива, расположенных до последнего положительного элемента включительно;
отсортировать массив по возрастанию методом "пузырька".
Вариант 11
Написать программу работы с одномерным массивом из 15 целых элементов для решения задач:
вычислить сумму модулей элементов массива, расположенных после первого элемента, равного нулю;
найти методом последовательного поиска в массиве введенное пользователем значение и вывести его индекс на экран;
отсортировать массив по убыванию методом "пузырька".
Вариант 12
Написать программу работы с одномерным массивом из 15 вещественных элементов для решения задач:
подсчитать количество элементов массива, больших введенного пользователем значения R;
вычислить сумму элементов массива, расположенных между первым и вторым отрицательными элементами;
отсортировать массив по возрастанию методом выбора.
Вариант 13
Написать программу работы с одномерным массивом из 15 вещественных элементов для решения задач:
упорядочить по убыванию при вводе элементы массива методом простой вставки;
подсчитать количество элементов массива, лежащих в диапазоне от R1 до R2, вводимых пользователем;
найти индекс минимального по модулю элемента массива.
Вариант 14
Написать программу работы с одномерным массивом из 15 целых элементов для решения задач:
подсчитать количество положительных элементов массива;
вычислить произведение элементов массива, расположенных между первым и вторым нулевыми элементами;
отсортировать массив по убыванию методом выбора.
Вариант 15
Написать программу работы с одномерным массивом из 15 целых элементов для решения задач:
подсчитать количество элементов массива, равных 0;
вычислить сумму элементов массива, расположенных после максимального элемента;
отсортировать массив по убыванию методом "пузырька".