1. 程式人生 > >Linux核心中的bsearch二分查詢函式

Linux核心中的bsearch二分查詢函式

/*
* bsearch - binary search an array of elements
* @key: pointer to item being searched for
* @base: pointer to first element to search
* @num: number of elements
* @size: size of each element
* @cmp: pointer to comparison function
*
* This function does a binary search on the given array.  The
* contents of the array should already be in ascending sorted order
* under the provided comparison function. * * Note that the key need not have the same type as the elements in * the array, e.g. key could be a string and the comparison function * could compare the string with the struct's name field. However, if * the key and elements in the array are of the same type, you can use
* the same comparison function for both sort() and bsearch(). */ void *bsearch(const void *key, const void *base, size_tnum, size_tsize, int(*cmp)(const void *key, const void *elt)) { size_tstart = 0, end = num; int result; while (start < end) { size_tmid = start + (end - start) / 2; result =
cmp(key, base + mid * size); if (result < 0) end = mid; else if (result > 0) start = mid + 1; else return (void *)base + mid * size; } return NULL; } EXPORT_SYMBOL(bsearch);