Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lesson_10.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
96.26 Кб
Скачать
  1. Двоичный поиск.

Двоичный(бинарный) поиск — алгоритм поиска элемента в отсортированном массиве. Бинарный поиск нашел себе применение в математике и информатике. Возможно, Вы не будете пользоваться алгоритмом двоичного поиска, но знать его принцип работы должны. Двоичный поиск можно использовать только в том случае, если есть массив, все элементы которого упорядочены (отсортированы). Бинарный поиск не используется для поиска максимального или минимального элементов, так как в отсортированном массиве эти элементы содержатся в начале и в конце массива соответственно, в зависимости от тога как отсортирован массив, по возрастанию или по убыванию. Поэтому алгоритм бинарного поиска применим, если необходимо найти некоторый ключевой элемент в массиве. То есть организовать поиск по ключу, где ключ — это определённое значение в массиве. Разработаем программу, в которой объявим одномерный массив, и организуем двоичный поиск.Объявленный массив нужно инициализировать некоторыми значениями, причём так, чтобы эти значения были упорядочены.

Так как, алгоритмы сортировки, нам пока не изучали, то массив инициализируем вручную, причём обязательно упорядоченно. Далее вводим искомый элемент массива и запускаем программу.

#include <iostream>

using namespace std;

void main()

{

setlocale (LC_CTYPE, "russian");

const int size_array = 10;

int array_[size_array]= {-8, -7, -6, -6, -4, 2, 6, 7, 8, 15 }; // объявление одномерного массива

cout << "array[" << size_array << "] = { ";

for (int counter = 0; counter < size_array; counter++)

{

cout << array_[counter] << " "; // печать элементов одномерного массива array1

}

cout << " }" << "\n";

int average_index = 0, // переменная для хранения индекса среднего элемента массива

first_index = 0, // индекс первого элемента в массиве

last_index = size_array -1; // индекс последнего элемента в массиве

int key; // искомое (ключевое) значение

cout << "Введите ключ поиска: ";

cin >> key;

if (last_index == -1) cout << "\nМассив пустой" << endl; // массив пуст

while (first_index < last_index)

{

average_index = (first_index + last_index) / 2; // меняем индекс среднего значения

key <= array_[average_index] ? last_index = average_index : first_index = average_index + 1; // найден ключевой элемент или нет

}

if ( array_[last_index] == key)

cout << "\nЗначение найдено!" << "\nиндекс значения = " << last_index << endl;

else

cout << "\nзначение не найдено!" << endl;

cin.get();

cin.get();

}

Рассмотрим пошагово, как именно работает алгоритм двоичного поиска в массивах на псевдокоде (например искомое значение = 15):

Шаг первый:

проверка условия цикла: 0 < 9 — true

average_index = 0 + (9 — 0) / 2 = 4, значит средний элемент -4

проверка в условной операции 15 <= (-4) — false

значит first_index = 4 + 1 = 5

Шаг второй:

проверка условия цикла: 5 < 9 — true

average_index = 5 + (9 — 5) / 2 = 7, значит средний элемент 7

проверка в условной операции 15 <= 7 — false

значит first_index = 7 + 1 = 8

Шаг третий:

проверка условия цикла: 8 < 9 — true

average_index = 8 + (9 — 8) / 2 = 8 // значит средний элемент 8

проверка в условной операции 15 <= 8 — false

значит first_index = 8 + 1 = 9

Шаг четвёртый:

проверка условия цикла: 9 < 9 — false // выходим из цикла

при этом значение в переменной last_index не менялось, так как искомое значение в последнем элементе массива

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]