У меня есть вопрос о нижеследующем методе двоичного поиска от Apple.
void *bsearch_from_a(const void *key, const void *base, size_t nmemb,
size_t width, int (*compar)(const void *, const void *)) {
for (size_t nremain = nmemb; nremain != 0; nremain >>= 1) {
void *p = (char *)base + (nremain >> 1) * width; // I don't get this
// this is comparing key & where currently p is pointing
int sign = compar(key, p);
if (sign == 0) { // if p and key are equal, sign is 0
return p;
}
if (sign > 0) { // when key > p, move right
base = (char *)p + width;
nremain--;
}
}
return NULL;
}
есть ли способ найти количество элементов справа от базы (включая основание), когда выполнено указанное выше для цикла forа ключ не найден в массиве? Вы можете создать любую переменную, которую вы хотите. Любая помощь будет очень признательна. Заранее спасибо.