Бинарный поиск ошибка чтения

137
03 октября 2021, 13:20

Есть задание найти значение в массиве и вывести его. Для этого я использую бинарный поиск, но не могу понять почему выводит ошибку. Ошибка чтения в if (mass[mid] == key).

#include <iostream>
#include <fstream>
#include <chrono>
#include <iomanip>
#include <algorithm>
using namespace std;
//cама функция
int Search_Binary(int mass[], int left, int right, int key)
{
    if (right >= left) {
        int mid = left + (right - left) / 2;
        if (mass[mid] == key)
            return mid;
        if (mass[mid] > key)
            return Search_Binary(mass, left, mid - 1, key);
        return Search_Binary(mass, mid + 1, right, key);
    }
    return -1;
}
int main()
{
    setlocale(LC_ALL, "Rus");
    const int size = 50000;
    int *mass = new int[size];
//число которое которе нужно найти
    int key = 21863;
    ifstream fil;
    fil.open("F://serch//50k.txt");
    for (int i = 0; i < size; i++) {
        fil >> mass[i];
    }
//засчечение начало времени
    auto start = chrono::high_resolution_clock::now();
    double answer;
//сортировка массива из файла
    sort(mass, mass + size);
    //вызов функции и присваивание
    int left = mass[1];
    int right = mass[size - 1];
    Search_Binary(mass,left,right,key);
//Засечение конца времени
    auto end = chrono::high_resolution_clock::now();
    answer = chrono::duration_cast<chrono::nanoseconds>(end - start).count();
    answer *= 1e-9;
    cout << "Для поиска понадобилось: " << fixed << answer << setprecision(10) << endl;
    system("pause");
    return 0;
}
Answer 1

Что это за ерунда:

int left = mass[1];
int right = mass[size - 1];

?

Согласно вашей задумке, как я ее понял, left и right должны быть индексами элементов массива. У вас же они внезапно инициализируются значениями элементов массива.

READ ALSO
Отправить письмо

Отправить письмо

Задача в следующем, мне нужно написать прогу, которая отправляла бы на указанные адреса почт моих контрагентов письма с вложениями (не спам...

72
адресная арифметика с++ и онлайн компиляторы

адресная арифметика с++ и онлайн компиляторы

извиняюсь за нубский вопрос: при обьявлении и инициализации переменных - как происходит восприятие указателем или онлайн-компилятором их адреса?...

62
C++, вопрос про атомарность

C++, вопрос про атомарность

Я не могу найти ответы на следующие вопросы:

95
Соединение сигналами и слотами класса приложения и класса из dll подгружаемой динамически

Соединение сигналами и слотами класса приложения и класса из dll подгружаемой динамически

Реализую библиотеку по обработки данных с устройства, в последствии количество устройств будет наращиваться и я пишу гибкое решениеУ меня...

71