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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Переписать пять первых положительных элементов массива подряд в другой массив http://www.cyberforum.ru/cpp-beginners/thread204604.html
Люди добрые, помогите решить пару задач на С++ на одномерные и двумерные массивы (я новичок и мало что в этом соображаю): 1)Дан массив Х. Переписать пять первых положительных элементов массива подряд в массив У. Найти максимальный элемент массива Х. 2)Найти наибольший и наименьший элементы вещественного массива. Если таких элементов несколько, определить, сколько их. Создать фйнкции для...
C++ работа с векторами для заданных с клавиатуры значений х1,х2....хn вычислить значение величины Y по формуле: Y=n*sqr(x1)+(n-1)*sqr(x2)+(n-2)*sqr(x3)+...+1*sqr(xn) http://www.cyberforum.ru/cpp-beginners/thread204589.html
C++ Вычисление произведения отрицательных элементов в каждом столбце двумерного массива
Напишите фрагменты программ для решения следующих задач: 1)вычисление произведения отрицательных элементов в каждом столбце двумерного массива; 2)вычисление суммы положительных элементов в каждой строке двумерного массива.
C++ шаблон стека
нужно написать шаблон стека. не как работающую программу, а как часть кода. помогите пожалуйста, если кто знает
C++ Поиск подстроки в файле http://www.cyberforum.ru/cpp-beginners/thread204546.html
Помогите организовать поиск подстроки в текстовой строки файле, которая вводится с клавиатуры
C++ составить блок схему #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <time.h> int main() {int i,j; int num; //выделена память под двумерный массив clrscr(); for(i=0; i<3; i++) //индекс строки изменяется от 0 до 2 подробнее

Показать сообщение отдельно
bLesk
 Аватар для bLesk
41 / 41 / 1
Регистрация: 24.11.2009
Сообщений: 165
07.12.2010, 16:39     бинарный поиск, для char
всем привет! Не подскажете как реализовать метод бинарного поиска для поля записи(я использую массив записей), если тип данных 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 )
всем спасибо, за ничто
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 18:55. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru