Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
TheNegativeOne
0 / 0 / 0
Регистрация: 06.09.2014
Сообщений: 3
1

Бинарный поиск через рекурсию: разобрать логику кода

09.09.2014, 18:45. Просмотров 684. Ответов 4
Метки нет (Все метки)

Помогите , уже второй день мучаюсь с алгоритмом бинарного поиска через рекурсию . Не понимаю откуда берутся значения которые мне выдает программа .
Код ниже .
C++
1
2
3
4
5
6
7
8
9
int search(int massive[10], int ls, int rs, int element)
{
    
    int m = (ls + rs) / 2;
    if (massive[m] == element) return m;
    if (ls = rs) return -1;
    if (massive[m] > element)      { rs = m; search(massive, ls, rs, element); }
    else if (massive[m] < element) { ls = m; search(massive, ls, rs, element); }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.09.2014, 18:45
Ответы с готовыми решениями:

Разобрать логику работы приведенного кода
Здравствуйте, уважаемые! #include &lt;iostream&gt; using namespace std; long...

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

Поиск кратчайшего пути в матрице через рекурсию
Есть задача: найти кратчайший путь в матрице,представляющий из себя сумму...

Подскажите логику нескольких строк кода
Помогите пожалуйста. Меня интересуют только места где используется указатель....

Не понимаю логику обработки кода, разбитого на файлы
Ситуация примерно такая. Есть файл file1.h, в котором объявлена функция: ...

4
Dani
1393 / 637 / 134
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
Завершенные тесты: 1
09.09.2014, 19:05 2
TheNegativeOne, а весь код можно?
0
zss
Модератор
Эксперт С++
7412 / 6802 / 4302
Регистрация: 18.12.2011
Сообщений: 17,969
Завершенные тесты: 1
09.09.2014, 19:07 3
Цитата Сообщение от TheNegativeOne Посмотреть сообщение
ls = rs
C++
1
ls==rs
0
TheNegativeOne
0 / 0 / 0
Регистрация: 06.09.2014
Сообщений: 3
09.09.2014, 19:17  [ТС] 4
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
37
38
39
40
41
42
43
include <iostream>
#include <conio.h>
#include <time.h>
using namespace std;
void sort(int massive[15]);
int search(int massive[], int ls, int rs, int element);
int massive[15];
void main()
{
    int key;
    setlocale(LC_ALL, "Russian");
    srand(time(0));
    
 
    for (int i = 0; i < 15; i++)// Массив заполняется числами равными его номеру
        massive[i] = rand()%15;
    sort(massive);
    key=search(massive, 0, 15, 9);
    cout << key;
    _getch();
}
void sort(int massive[15])
{
    for (int i = 0; i < 15; i++){
        for (int j = 1; j < 15; j++)
        {
            int t;
            if (massive[j - 1]>massive[j]) { t = massive[j]; massive[j] = massive[j - 1]; massive[j - 1] = t; }
        }
    }
}
 
 
 
int search(int massive[], int ls, int rs, int element)
{
    //if ((ls = rs - 1) && (element != massive[rs]) && (element != massive[ls])) return -1;
 
    int m = (ls + rs) / 2;
    if (massive[m] == element) return m;
    if (massive[m] > element) { rs = m;   search(massive, ls, rs, element); }
    else if (massive[m] < element) { ls = m; search(massive, ls, rs, element); }
}
#



Добавлено через 1 минуту
Цитата Сообщение от zss Посмотреть сообщение
C++
1
ls==rs
Цитата Сообщение от zss Посмотреть сообщение
ls==rs
Я плавно перехожу от Object Pascal к C++ , остались пережитки
0
TheNegativeOne
0 / 0 / 0
Регистрация: 06.09.2014
Сообщений: 3
13.09.2014, 19:08  [ТС] 5
Вроде работает .
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <iostream>
#include <conio.h>
#include <time.h>
 
using namespace std;
int recurse_seek(int *massive, int ls, int rs, int element);
int recurse_seek_(int *massive, int ls, int rs, int element);
void sort(int *p);
void main()
{
    srand(time(0));
    int qwert[10];
    for (int i = 0; i < 10; i++)    
        qwert[i] = rand()%10;       
    int *p(0);              
    sort(qwert);                    
    p = qwert;                      
    for (int i = 0; i < 10; i++)        
    {                                       
        int key = recurse_seek(p, 0, 9, i); 
        cout << key;                        
        cout<< endl;                        
    }
    
 
    _getch();
}
int recurse_seek(int *massive,int ls,int rs,int element) 
{                                                       
                                                        
    if (ls < 0 || rs < 0) return -1;            
    if (*(massive+rs) == element) return rs;  
    recurse_seek_(massive, ls, rs, element); 
}
int recurse_seek_(int *massive, int ls, int rs, int element)
{
    if (ls == 0 && rs == 0 && element != *massive) return -4; 
    if (ls == rs - 1 && *(massive + ls)<element) return -3; 
    int m = (ls + rs) / 2;
    if (*(massive + m) == element) return m;
    if (*(massive + m) > element) { rs = m; return recurse_seek_(massive, ls, rs, element); }
    if (*(massive + m) < element) { ls = m; return recurse_seek_(massive, ls, rs, element); }
}
void sort(int *p)
{
    for (int i = 0; i < 10; i++)
    {
        for (int j = 1; j < 10; j++)
        {
            if (*(p + (j - 1))>*(p + j)) { int t = *(p + (j - 1)); *(p + (j - 1)) = *(p + j); *(p + j) = t; }
        }
    }
}
0
13.09.2014, 19:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.09.2014, 19:08

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

Разобрать строку кода
как детально разобраться с этой строчкой кода : cout&lt;&lt;((A&gt;&gt;i)&amp;1);

Разобрать строку кода
Часть программы, если что // Game engine struct Piece { struct {...


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

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

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