1 / 1 / 0
Регистрация: 18.02.2020
Сообщений: 67
1

Бинарный поиск в массиве

07.12.2020, 23:57. Показов 1411. Ответов 2

Доброго времени суток! Проблема такая: не работает бинарный поиск в массиве объектов структуры car. Туплю ужасно, не могу найти ошибку. Причем, данные выводятся корректные, если выводить, например, поле age конкретного объекта. Ни разу еще не нашелся нужный элемент. Пробовал уже гуглить эти алгоритмы, и ни один не работает. А вот линейный колхозный поиск - пожалуйста.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void Search_Binary(car* array, int left, int right, int key)
{
    int search = -1;
    while (left <= right)
    {
        int mid = (left + right) / 2;
        if (key == array[mid].age) {
            search = mid;
            break;
        }
        if (key < array[mid].age)
            right = mid - 1;
        else 
            left = mid + 1;
    }
    if (search == -1)
        printf("Элемент не найден!\n");
    else
        printf("%d. key= %d.", search, array[search].age);
}
C++
1
2
3
4
5
6
int linsearch(car* array, int size, int key) {
    for (int i(0); i < size; i++)
        if (array[i].age == key)
            return i;
    return -1;
}
Добавлено через 38 минут
UPD: выяснилось, что функция стала работать при смене условия на обратное в строке 11. Но при этом та же самая функция, только в ином виде
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int Search_Binary(car* array, int left, int right, int key)
{
    while (left <= right)
    {
        int mid = (left + right) / 2;
        if (key == array[mid].age)
            return mid;
        if (key < array[mid].age)
            left = mid + 1;
        else
            right = mid - 1;
    }
}
работает с обычным условием, и не работает с обратным. Объясните, пожалуйста, что не так? Я всю голову сломал, но так и не понял, в чем прикол с этим условием.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.12.2020, 23:57
Ответы с готовыми решениями:

Поиск числа в двумерном массиве (бинарный поиск)
Произвожу поиск элемента в массиве двумя способами: линейным(последовательным) поиском и...

Бинарный поиск в массиве с++
Помогите, пожалуйста с задачей: Создать массив из 20-ти елементов, инициализировать массив. 1)...

Бинарный поиск в массиве
Помогите нужна программа по поиску числа в массиве (бинарным методом). Очень очень нужно:(

Бинарный поиск в массиве
Нужно написать программу для курсовой по теме : Разработка Windows приложения для бинарного поиска...

2
375 / 268 / 109
Регистрация: 18.07.2017
Сообщений: 1,278
08.12.2020, 20:54 2
Лучший ответ Сообщение было отмечено council_estate как решение

Решение

Цитата Сообщение от council_estate Посмотреть сообщение
не работает бинарный поиск в массиве объектов структуры car
У меня все работает. Ты неправильные данные суешь, либо неотсортированные.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <locale.h>
#include <stdio.h>
#include <conio.h>
#include <math.h>
 
typedef struct car{
    int age;
}car;
 
void Search_Binary(car* array, int left, int right, int key)
{
    int search = -1;
    while (left <= right)
    {
        int mid = (left + right) / 2;
        if (key == array[mid].age) {
            search = mid;
            break;
        }
        if (key < array[mid].age)
            right = mid - 1;
        else 
            left = mid + 1;
    }
    if (search == -1)
        printf("Ýëåìåíò íå íàéäåí!\n");
    else
        printf("%d. key= %d.\n", search, array[search].age);
}
 
int main () {
    car cars[] = {1,3,4,5,7,8,9,10};
    int i = 8;
    while(i--) Search_Binary(cars, 0, 7, cars[i].age);
    Search_Binary(cars, 0, 7, 2);
}
Код
7. key= 10.
6. key= 9.
5. key= 8.
4. key= 7.
3. key= 5.
2. key= 4.
1. key= 3.
0. key= 1.
ыхьхэЄ эх эрщфхэ!
1
1 / 1 / 0
Регистрация: 18.02.2020
Сообщений: 67
02.03.2021, 15:37  [ТС] 3
assemberist, а все потому что надо читать статьи до конца)) Неотсортированный массив я пихал в несчастный алгоритм. Спасибо большое)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.03.2021, 15:37
Помогаю со студенческими работами здесь

Бинарный поиск в массиве
Здравствуйте! Подскажите пожалуйста, как написать программу бинарного поиска в массиве? Вот...

Бинарный Поиск в Массиве С++
Реализовать бинарный поиск в массиве. Для сортировки массива использовать пузырьковый метод...

Бинарный поиск в массиве
Бинарный поиск работает через раз. Не могу найти ошибку. #include &quot;stdafx.h&quot; #include &lt;iostream&gt;...

Бинарный поиск в одномерном массиве
Заполнить одномерный массив из n элементов по формуле соотв-ей вашему варианту задания....

Бинарный поиск в упорядоченном массиве
Задали реализовать бинарный поиск в упорядоченном массиве.Уже пол дня творю,3 листа исписал и...

Бинарный поиск элемента в массиве
Суть - программа ищет число по формуле K=(a+b)/2 бинарным поиском, и выводит его порядковый номер...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru