bsearch
معرفة في ملف <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 | - | دالة مقارنة تقوم بإرجاع عدد صحيح سالب عندما يكون المعطى الأول أصغر من المعطى الثاني. عدد صحيح موجب عندما يكون المعطى الأول أكبر من المعطى الثاني وصفر إذا تساوى المعطيان. 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
[تعديل]أنظر أيضا
(C11) | ترتب مجموعة من العناصر دون مبالاة للنوع (دالة) |
مقالة مرجع C++ عن bsearch |