Вопрос о методе двоичного поиска Apple C - PullRequest
0 голосов
/ 28 октября 2019

У меня есть вопрос о нижеследующем методе двоичного поиска от 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а ключ не найден в массиве? Вы можете создать любую переменную, которую вы хотите. Любая помощь будет очень признательна. Заранее спасибо.

...