Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
unitod
0 / 0 / 1
Регистрация: 03.04.2015
Сообщений: 18
#1

Бинарный поиск элемента массива - C++

02.05.2015, 15:19. Просмотров 284. Ответов 2
Метки нет (Все метки)

Всем привет. Помогите пожалуйста.
Есть массив X из n елементов, который рандомится в диапазоне [0; 10000].
И элемент У стого-же диапазона.
Нужно найти Y в X и его позицию.
Вот набросок бинарного метода поиска
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
 
     k1=1;
     k2=n;
     do
     {
           i = (k1+k2) / 2;
           if (x[i] < y){
                k1=i+1;
           }else if(x[i] > y){
                k1=i-1;
           }
    }while(x[i]==y || k1 > k2+1);
     if (x[i]==y)
              printf("HAyDENO HA MESTE %d\n",i); 
                  else
              printf("HE HAyDENO\n");
но цикл проходит только 1 раз, кто может подсказать в чём проблема?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.05.2015, 15:19
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Бинарный поиск элемента массива (C++):

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

Реализовать бинарный поиск заданного элемента в массиве
Доброго времени суток, форумчане! Реализую алгоритмы поиска: линейный и...

Реализовать бинарный поиск заданного элемента в массиве
Помогите, напишите бинарный поиск элемента в массиве (особенно чтобы он...

Двоичный (бинарный) поиск элемента в двумерном массиве
Доброго времени суток. есть вот такое задание: Написать функцию, реализующую...

Бинарный поиск и четные элементы массива
Добрый день . Как с помощью бинарного поиска найти четные элементы массива?Вот...

Бинарный поиск не находит нулевой элемент массива
Мой бинарный поиск не находит нулевой элемент массива. Не получается исправить...

2
_Valera_
489 / 371 / 136
Регистрация: 27.01.2015
Сообщений: 1,588
02.05.2015, 15:25 #2
Цитата Сообщение от unitod Посмотреть сообщение
while(x[i]==y || k1 > k2+1);
В условие все перепутано.
То есть:
-Делать до тех пор пока x[i] равно У или пока 1 больше чем Н-1 //Ни то-ни то не верно изначально.
1
unitod
0 / 0 / 1
Регистрация: 03.04.2015
Сообщений: 18
02.05.2015, 23:59  [ТС] #3
точно, спасибо.
что-то не посмотрел.

Добавлено через 22 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
     k1=1;
     k2=n;
     do
     {
           i = (k1+k2) / 2;
           if (x[i] < y){
                k1=i+1;
           }else if(x[i] > y){
                k1=i-1;
           }
    }while(x[i]!=y && k1 <= k2+1);
     if (x[i]==y)
              printf("HAyDENO HA MESTE %d\n",i); 
                  else
              printf("HE HAyDENO\n");
Так зацикливается.

Добавлено через 22 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
k1=0;
     k2=n;
     i = (k1+k2) / 2;
     do
     {
           if (x[i] < y){
                i=i++;
           }else if(x[i] > y){
                i=i--;
           }
    }while(x[i]!=y && i < n-2 && i >= 0);
     if (x[i]==y)
              printf("HAyDENO HA MESTE %d\n",i); 
                  else
              printf("HE HAyDENO\n");
Если элемента нет в массиве, то зациклится, как исправить алгоритм?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.05.2015, 23:59
Привет! Вот еще темы с решениями:

Бинарный поиск произведения и суммы чисел массива
Создать массив на 16 ячеек. Найти произведение элементов этого массива до...

Бинарный поиск не находит второй и предпоследний элементы массива
Вот вроде бы всё работает только как-то не очень правильно не находит 2 позицию...

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

Поиск элемента массива
#include &quot;stdafx.h&quot; #include &quot;iostream&quot; using namespace std; int main()...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru