Как найти Двоичный поиск? - C (СИ)
Формулировка задачи:
Как найти Двоичный поиск?
Решение задачи: «Как найти Двоичный поиск?»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
int binSearch(int *array, int n, int key);
int a[1000000];
int b[15000];
int main()
{
int i;
int n, m;
scanf("%d %d\n", &n, &m);
for (i = 0; i < n; i++){
scanf("%d", &a[i]);
}
for (i = 0; i < m; i++){
scanf("%d", &b[i]);
}
/* processing */
for (i = 0; i < m; i++){
printf("%d", binSearch(a, n, b[i]));
}
system("pause");
return 0;
}
int binSearch(int *array, int n, int key)
{
int mid;
int min = 0;
int max = n - 1;
while (min <= max){
mid = min + ((max - min ) / 2);
if (array[mid] == key)
return 1;
if (key > array[mid]){
min = mid + 1;
}
if (key < array[mid]){
max = mid - 1;
}
}
return 0;
}
Объяснение кода листинга программы
В данном коде реализован алгоритм двоичного поиска. Он используется для поиска ключа в отсортированном массиве. Список действий:
- Ввод данных:
- Ввод количества элементов в первом массиве
n. - Ввод количества элементов во втором массиве
m. - Ввод элементов первого массива
a. - Ввод элементов второго массива
b.
- Ввод количества элементов в первом массиве
- Обработка данных:
- Здесь предполагается какая-то обработка данных, но в данном коде она отсутствует.
- Выполнение двоичного поиска:
- Для каждого элемента второго массива
bвыполняется двоичный поиск в первом массивеa. - Возвращается значение 1, если элемент найден, и 0 в противном случае.
- Для каждого элемента второго массива
- Вывод результатов:
- Результаты поиска выводятся на экран.
- Завершение работы программы:
- Программа ожидает нажатия клавиши
pauseдля завершения работы. В данном коде переменныеnиmиспользуются для хранения количества элементов в массивахaиbсоответственно. Массивaиспользуется для хранения данных, в которых будет производиться поиск, а массивb- для хранения ключей, которые будут искаться в массивеa. Алгоритм двоичного поиска реализован в функцииbinSearch. Она принимает указатель на массив, его размерn, и искомый ключkey. Внутри функции используется циклwhile, который выполняется до тех пор, покаminне станет больше или равноmax. Это условие означает, что искомый ключ не найден. Внутри цикла вычисляется средний индексmidс помощью формулыmin + ((max - min) / 2). Затем проверяется равенствоarray[mid]иkey. Если они равны, то ключ найден, и функция возвращает 1. Если ключ большеarray[mid], то искомый ключ находится в правой половине массива, иminувеличивается на 1. Если ключ меньшеarray[mid], то искомый ключ находится в левой половине массива, иmaxуменьшается на 1. Если ключ не найден, то функция возвращает 0.
- Программа ожидает нажатия клавиши