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

bsearch

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

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

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

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

محتويات

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

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

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

 int cmp(constvoid*a, constvoid*b);

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

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

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

[تعديل]مثال

#include <stdlib.h>#include <stdio.h>   struct data {int nr;charconst*value;} dat[]={{1, "Foo"}, {2, "Bar"}, {3, "Hello"}, {4, "World"}};   int data_cmp(voidconst*lhs, voidconst*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]
close