Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
bLesk
41 / 41 / 1
Регистрация: 24.11.2009
Сообщений: 165
#1

бинарный поиск, для char - C++

07.12.2010, 16:39. Просмотров 787. Ответов 0
Метки нет (Все метки)

всем привет! Не подскажете как реализовать метод бинарного поиска для поля записи(я использую массив записей), если тип данных char ? пробывал несколько вариантов, компилировалось без проблем, а вот ищет не корректно =( Надеюсь поможете! Всем заранее спасибо

Добавлено через 23 часа 0 минут
ну что никто не может помочь?

Добавлено через 42 минуты
вот в общем что смог сделать я:

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
void bin ()
{
        cout<<"\n OLD ARRAY ";
        for (int i=0;i<n;i++)
          {
             if (*data[i].name)
              {
                cout <<"\n Surname : "<<data[i].name;
                cout <<"\n Age : "<<data[i].age;
              }
          }
        int tmp;
        char temp[20];
        for (int i=1; i < n; i++)
          for (int j=0; j < n-1; j++)
            if ((int)data[j].name[1] > (int)data[j+1].name[1])
            {
              strcpy(temp , data[j].name);
              strcpy(data[j].name , data[j+1].name);
              strcpy(data[j+1].name , temp);
              tmp = data[j].age;
              data[j].age = data[j+1].age;
              data[j+1].age = tmp;
            }
        cout<<"\n NEW  ARRAY ";
        for (int i=0;i<n;i++)
          {
             if (*data[i].name)
                {
                  cout <<"\n Surname : "<<data[i].name;
                  cout <<"\n Age : "<<data[i].age;
                }
          }
  int first = 0;
  int last = 7;
 
  char pois[20];
  cout<<"\n Enter element,which you want to find(binnary serach) : ";
  cin>>pois;
  while ( first < last ) {
    int mid = ( first + last ) / 2;
    if ( pois[1] <= data[mid].name[1] ) {
      last = mid;
    } else {
      first = mid + 1;
    }
  }
  if ( (strcmp(pois,data[last].name )))
  {
    cout <<"\n Number of element : "<<last+1;
  }
  else  cout<<"\n  Element not founded:(";
}
только сортирует не верно, если сделать сортировку по возрасту то сортировка работает (у меня в записи поле char и поле int)

мне кажется что что-то не так в этом месте

C++
1
if ((int)data[j].name[1] > (int)data[j+1].name[1])
как можно сравнивать два символа типа char - какой больше, а какой меньше?

Добавлено через 2 минуты
запись такая
C++
1
2
3
4
5
6
int const n=8;
 
struct record {
    char name[20];
    int age;
}data[n];
Добавлено через 16 минут
исправил, нужно было делать так:

C++
1
if (strcmp(data[j].name , data[j+1].name) >0 )
всем спасибо, за ничто
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.12.2010, 16:39     бинарный поиск, для char
Посмотрите здесь:

C++ Бинарный поиск
C++ Бинарный поиск
C++ Бинарный поиск
C++ Бинарный поиск
C++ Поиск по классу с полями char* для массива обьектов class a[i]
C++ Бинарный поиск для std::list
Бинарный поиск C++
Бинарный поиск C++
C++ Бинарный поиск
C++ Бинарный поиск
Бинарный поиск для нахождения количества повторяющихся элементов C++
Запись структуры (в ней есть поля типа данных char*) в бинарный файл C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 20:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru