как будет отображаться вывод?

#c

#c

Вопрос:

я писал код на c для выполнения двоичного поиска в массиве, но не могу получить желаемый результат. при выполнении кода я получаю бесконечный вывод, в чем может быть причина этого?

 #include <iostream>
using namespace std;

void Binary(int arr[], int n, int key)
{
  int s = 0;
  int e = n - 1;

  while (s <= e) {
    int mid = (s   e) / 2;

    if (arr[mid] == key) {
      cout << "Element Found At Index No. " << mid;
    } else if (arr[mid] > key) {
      e = mid - 1;
    } else {
      s = mid   1;
    }
  }
}

int main()
{
  int n;
  cin >> n;

  int arr[n];
  for (int i = 0; i < n; i  ) {
    cin >> arr[i];
  }

  int key;
  cout << "Enter element to be searched!";
  cin >> key;

  Binary(arr, n, key);

  return 0;
}
 

Ответ №1:

После того, как вы найдете свой элемент, вы создаете вывод, но никогда не выходите из цикла или не изменяете ни одно из значений, которые проверяет условие цикла.

Просто выйдите из цикла (или вернитесь из функции) после отображения вашего вывода:

 if (arr[mid] == key) {
  cout << "Element Found At Index No. " << mid;
  break;
}
 

Ответ №2:

Ответ, предоставленный @1201ProgramAlarm, является правильным исправлением. Добавление нескольких незначительных изменений:

  • Вместо using namespace std; этого было бы лучше явно указать разрешение области для std::cin и std::cout
  • Предоставление еще нескольких инструкций печати при вводе элементов массива.
      #include <iostream>
    
     void Binary(int arr[], int n, int key)
     {
       int s = 0;
       int e = n - 1;
    
       while (s <= e) {
         int mid = (s   e) / 2;
    
         if (arr[mid] == key) {
           std::cout << "Element Found At Index No. " << mid;
           break;
         } else if (arr[mid] > key) {
           e = mid - 1;
         } else {
           s = mid   1;
         }
       }
     }
    
     int main()
     {
       int n;
       std::cout << "Enter Number of elements in the array: ";
       std::cin >> n;
    
       int arr[n];
       std::cout << "Enter " << n << " sorted array elements: ";
       for (int i = 0; i < n; i  ) {
         std::cin >> arr[i];
       }
    
       int key;
       std::cout << "Enter element to be searched!";
       std::cin >> key;
    
       Binary(arr, n, key);
    
       return 0;
     }