Программа бинарного поиска, возвращающая нежелательные значения - PullRequest
1 голос
/ 27 января 2020

Я написал программу для бинарного поиска, но она не работает должным образом. Я также написал код для сортировки массива, который работает, но когда я принимаю элемент для поиска, программа перестает работать и возвращает нежелательные значения. Он показывает Process returned -1073741819 (0xC0000005) каждый раз, когда я запускаю программу. Вот мой код

#include <iostream>
using namespace std;

int main() {
  int arr[10], n, i, j, temp;

  cout << "Enter number of elements: ";
  cin >> n;

  for (i = 0; i < n; i++) {
    cout << "Enter element " << i + 1 << ": ";
    cin >> arr[i];
  }

  cout << "\nThe sorted array is: \n";

  for (i = 0; i < n; i++) {
    for (j = 0; j < n - i - 1; j++) {
      if (arr[j] > arr[j + 1]) {
        temp = arr[j];
        arr[j] = arr[j + 1];
        arr[j + 1] = temp;
      }
    }
  }

  for (i = 0; i < n; i++) {
    cout << arr[i] << " ";
  }

  int last, beg, mid, se, flag = 0;

  cout << "\n.\nEnter the element to be searched: ";
  cin >> se;

  last = n - 1;
  beg = 0;

  while (beg <= last) {
    mid = (last + mid) / 2;

    if (se > arr[mid])
      beg = mid + 1;

    else if (se < arr[mid])
      last = mid - 1;

    else {
      cout << se << " found at position " << mid + 1;
      flag = 1;
      break;
    }
  }

  if (flag == 0) cout << "No such thing exists...";

  return 0;
}

1 Ответ

0 голосов
/ 27 января 2020

Ошибка, по-видимому, заключается в следующей строке:

mid = (last + mid)/2; 

Вы хотите, чтобы mid было присвоено значение, равноудаленное от last и beg. Разрешите это bug в вашем коде, и оно должно работать.

...