Этот вопрос закрыт для ответов, так как повторяет вопрос Почему не работает бинарный поиск?
@dmitriyuvin
FullStack developer ( Laravel & Vue )

Как бинарным поиском найти самый первый элемент матрицы из диапазона?

Этот код для поиска конкретного элемента, не диапазона в одномерном массиве - РАБОТАЕТ!
#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;
}

Что не так, подскажите пожалуйста!
  • Вопрос задан
  • 105 просмотров
Ваш ответ на вопрос

Вопрос закрыт для ответов и комментариев

Потому что уже есть похожий вопрос.
Похожие вопросы