Я выполняю задание, в котором мне дана программа, которая читает файл данных и разбрасывает данные в массив байтов, где первые 4 байта массива сообщают вам, сколько у него имен людей (файл данных содержит).После остальной части массива, который содержит строки с именами людей.На этот массив указывает const void * foo;
Например, первые 4 байта говорят, что в массиве хранится 5 имен, а следующие 4 байта сообщают вам адрес имени человека.Имя человека хранится в массиве
int num = ((int*)foo)[0];
const int ppl1 = ((int*)foo)[1];
string name = ((char*)foo)+ppl1;
, поэтому num
сообщит вам 5 имен в массиве, а ppl1
сообщит вам позицию массива, где вы можете найти первое имя иname собирает имя человека, находящегося в этом слоте массива.
Практически, мне дано имя для поиска в массиве, и я хотел использовать бинарный поиск для doit.Я не знаю, как найти середину файла, можете ли вы, ребята, дать мне несколько советов?
cheers =]
РЕДАКТИРОВАТЬ: так что я создал это, но это сегнеисправности и работает только для одного случая (при поиске первой записи).Понятия не имею, почему ...
int first = 0;
int num = ((int*)foo)[0];
int last = num;
while (first <= last) {
int middle = first+last/2;
int offset = ((int*)foo)[middle];
string name = ((char*)foo)+offset;
if (person < name) {
last = middle-1;
} else if (person > name) {
first = middle+1;
} else {
break;
}