المتغيرات
فضاءات التسمية
أفعال

bsearch

من cppreference.com
< c‏ | algorithm
معرفة في ملف <stdlib.h>
void* bsearch( const void* key, const void* ptr, size_t count, size_t size,
               int (*comp)(const void*, const void*) );

تقوم بإيجاد عنصر مساوٍ للعنصر الذي يشير إليه ‎key‎ وذلك بالبحث داخل مصفوفة مرتبة مشار إليها بـ ‎ptr‎. المصفوفة تحوي عدد ‎count‎ من العناصر وكل عنصر حجمه ‎size‎ بايت. يتم استعمال الدالة المشار إليها بـ ‎comp‎ لإجراء المقارنات.

يكون السلوك غير معرف ما لم تكن المصفوفة مرتبة تصاعديا وفقا لنفس المعيار المستعمل من قبل ‎comp‎.

في حالة أن المصفوفة تحوي أكثر من عنصر تعتبرهم ‎comp‎ مساوي للعنصر الذي يتم البحث عنه, يكون غير معرفا أي تلك العناصر يتم إرجاعها.

محتويات

[تعديل] معطيات

key - مؤشر على العنصر المرض البحث عنه
ptr - مؤشر على المصفوفة المرض البحث فيها
count - عدد العناصر في المصفوفة
size - حجم كل عنصر في المصفوفة بالبايت
comp - دالة مقارنة تقوم بإرجاع عدد صحيح سالب عندما يكون المعطى الأول أصغر من المعطى الثاني.

عدد صحيح موجب عندما يكون المعطى الأول أكبر من المعطى الثاني وصفر إذا تساوى المعطيان. ‎key‎ يتم امرارها كمعطى أول. المعطى الثاني هو أحد عناصر المصفوفة.
تكون دالة المقارنة على هذه الشاكلة:

 int cmp(const void *a, const void *b);

لا يجوز للدالة أن تعدل من المعطيات

[تعديل] القيمة المُرجعة

إن وجد العنصر يتم إرجاع مؤشر عليه في المصفوفة. يتم إرجاع NULL‎ ما لم يكن العنصر موجودا.

[تعديل] مثال

#include <stdlib.h>
#include <stdio.h>
 
struct data {
    int nr;
    char const *value;
} dat[] = {
    {1, "Foo"}, {2, "Bar"}, {3, "Hello"}, {4, "World"}
};
 
int data_cmp(void const *lhs, void const *rhs) 
{
    struct data const *const l = lhs;
    struct data const *const r = rhs;
    return (l->nr > r->nr) - (l->nr < r->nr);
}
 
int main(void) 
{
    struct data key = { .nr = 3 };
    struct data const *res = bsearch(&key, dat, sizeof(dat)/sizeof(dat[0]),
                                   sizeof(dat[0]), data_cmp);
    if (!res) {
        printf("No %d not found\n", key.nr);
    } else {
        printf("No %d: %s\n", res->nr, res->value);
    }
}

الخرج:

No 3: Hello

[تعديل] أنظر أيضا

ترتب مجموعة من العناصر دون مبالاة للنوع
(دالة) [edit]