Бинарный поиск: Если в первом массиве есть такое же число, как и во втором, то написать YES - C (СИ)
Формулировка задачи:
Можете помочь составить бинарный поиск вида: если в первом массиве есть такое же число, как и во втором, то написать YES, иначе NO?
Решение задачи: «Бинарный поиск: Если в первом массиве есть такое же число, как и во втором, то написать YES»
textual
Листинг программы
#include <stdbool.h>
#include <stdlib.h>
#include <stdio.h>
int compare(const void* pa, const void* pb) {
int a = *(int*)pa;
int b = *(int*)pb;
return a < b ? -1 : a != b;
}
bool present(int* arr1, size_t siz1, int* arr2, size_t siz2) {
while (siz2--) {
if (bsearch(arr2++, arr1, siz1, sizeof(int), compare)) { return true; }
}
return false;
}
int main(void)
{
int a[] = { 1, 2, 3 };
int b[] = { 8, 9, 0 };
puts(present(a, 3, b, 3) ? "YES" : "NO");
return 0;
}
Объяснение кода листинга программы
- Подключение необходимых библиотек: stdbool.h, stdlib.h, stdio.h
- Определение функции сравнения: compare(const void pa, const void pb)
- Функция принимает на вход два указателя на массивы: arr1, arr2
- Внутри функции происходит приведение указателей к типу int: a = (int)pa; b = (int)pb;
- Затем происходит сравнение a и b: return a < b ? -1 : a != b;
- Если a меньше b, то возвращается -1, иначе возвращается 0
- В функции present(int arr1, size_t siz1, int arr2, size_t siz2) идет поиск числа из массива arr2 в arr1 с помощью функции bsearch
- Если число найдено, то функция возвращает true, иначе false
- В функции main создаются два массива: a и b
- Массив a содержит: 1, 2, 3, а массив b содержит: 8, 9, 0
- Затем вызывается функция present с этими массивами и выводится результат на экран с помощью функции puts
- Результатом выполнения программы будет
NO, так как число 0 из массива b не найдено в массиве a