Поиск заданного элемента в упорядоченном массиве (бинарный поиск) - Free Pascal
Формулировка задачи:
Заполнить одномерный массив из n элементов согласно таблицы. Размерность массива задать в виде именованной константы. Вывести массив на экран. Ввести с клавиатуры число. Используя метод половинного деления определить индекс первого элемента с таким значением и количеством таких элементов. Если элемент с таким значением в массиве отсутствует вывести соответствующее сообщение. Так же прикладываю пример решения
| Индексы элементов | 1 | 2 | 3 | 4 | 5 | 6 | 7 | ... |
| Значения элементов | 0 | 0 | 2 | 2 | 4 | 4 | 6 | 6 |
Решение задачи: «Поиск заданного элемента в упорядоченном массиве (бинарный поиск)»
textual
Листинг программы
l:=1; r:=n; k:=Число что ищем while l<>r do If a[(l+r) div 2]>k then r:=(l+r) div 2-1 else l:=(l+r) div 2 If a[l]=k then writeln(k,' присутсвует') else writeln(k,' отсутсвует')
Объяснение кода листинга программы
- Переменная
lинициализируется значением 1. - Переменная
rинициализируется значениемn. - Переменная
kинициализируется значением искомого элемента. - Запускается цикл while, который выполняется до тех пор, пока
lне станет равнымr. - Внутри цикла сравнивается средний элемент массива
aс искомым элементомk. - Если
a[(l+r) div 2]большеk, то значение переменнойrуменьшается на единицу. - Если
a[(l+r) div 2]меньше или равноk, то значение переменнойlуменьшается на единицу. - После выхода из цикла while проверяется, равен ли элемент массива
aс индексомlискомому элементуk. - Если равен, то выводится сообщение, что искомый элемент присутствует.
- Если не равен, то выводится сообщение, что искомый элемент отсутствует.