Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основы алгоритмизации и программирования в среде Visual C++ лаб практикум Навроцкий А А, Минск БГУИР, 2008 – 48 с 2008 (Лаб п.pdf
Скачиваний:
292
Добавлен:
15.06.2014
Размер:
813.01 Кб
Скачать

ЛАБОРАТОРНАЯ РАБОТА №11

ПОИСК ПО КЛЮЧУ В ОДНОМЕРНОМ МАССИВЕ СТРУКТУР

11.1. Поиск в массиве

Поиск – это нахождение информации в массиве по заданному значению (ключу).

11.1.1. Линейный поиск (метод полного перебора)

Метод применяется для неупорядоченных массивов и представляет собой последовательный перебор элементов до обнаружения требуемого ключа или до конца массива, если ключ не обнаружен.

int P_Lin1(int a[ ], int n, int x)

{

for(int i = 0; i < n; i++) if (a[i] == x) return i;

return -1;

}

Эффективность такого алгоритма пропорциональна количеству элементов. Единственная возможность улучшить вышеприведенный алгоритм – уменьшить количество проверок на каждом шаге. Для этого вводится вспомогательный элемент – барьер, который предохраняет от перехода за пределы

массива:

int P_lin2(int a[], int n, int x)

{

a[n+1] = x; int i = 0;

while (a[i] != x) i++;

if (i == n+1) return -1; else return i;

}

Эффективность этого алгоритма в два раза выше предыдущего.

11.1.2. Двоичный (бинарный) поиск

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

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

int P_Dv (int a[], int n, int x)

Соседние файлы в предмете Основы алгоритмизации и программирования