Этот код для поиска конкретного элемента, не диапазона в одномерном массиве - РАБОТАЕТ!
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
int main() {
int arr2[7] = { -2, -1, 0, 1, 2, 3, 4 };
printf("This is arr2!\n=============\n");
for (int i = 0; i < 7; i++) {
printf(" %i |", arr2[i]);
}
printf("\n=============\n");
int left = 0;
int right = 6;
while (left <= right) {
int mid = (left + right) / 2;
if (arr2[mid] < 3) {
left = mid + 1;
}
else if (arr2[mid] > 3) {
right = mid - 1;
}
else {
printf("Needed value is with index = %i!", mid);
return 0;
}
}
return 0;
}
Ниже код для бинарного поиска в матрице - работает только для конкретного, одного числа, не диапазона!
Но не проверяет на повторяющиеся элементы.
Если строка = [-5, -2, -1, -1, 6, 7, 9]. Ищем -1 , то поиск выберет -1 с индексом 3, а не 2.
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
int main() {
int arr[7][7] = { {-5, -2, -1, 1, 6, 7, 8},
{-91, 6, 6, 7, 7, 8, 9},
{-10, -1, 6, 7, 8, 9, 10},
{-1, -1, 7, 8, 8, 8, 9},
{-10, -8, -5, -1, -1, 7, 8},
{-3, -2, -1, -1, 6, 7, 8},
{1, 4, 13, 22, 31, 40, 52},
};
for (int i = 0; i < 7; i++) {
for (int j = 0; j < 7;j++) {
printf("%d", arr[i][j]);
printf(" ");
}
printf("\n");
}
for (int k = 0; k < 7; k++) {
int mid = 0;
int left = 0;
int right = 6;
while (left <= right) {
mid = (right + left) / 2;
if (arr[k][mid] < 1) {
left = mid + 1;
}
else if (arr[k][mid] > 1) {
right = mid - 1;
}
else {
printf("Needed value [%i] is with index = [%i]:[%i]!", arr[k][mid], k, mid);
return 0;
}
}
}
return 0;
}
Что не так, подскажите пожалуйста!