1、二分查找的关键:二分查找的基本思想是通过不断缩小查找的范围,每次将数据与数组中间的数据进行比较,从而一步一步进行比较并且缩小范围,进而找到目标数。
2、通用查找算法思想:对于每种的数据类型,其数据的比较方式会有所不同,比如,两个整数的比较,只要把两个整数相减,看结果是0还是正负数就可以比较出大小。但是对于通用来说,并不意味着只是整数进行比较,对于两个字符串的比较可以就要用strcmp进行比较,利用的函数原型是void* bsearch ( void* key, void* base, int num, int size, int (*compar)(const void*,const void*)) 第五个参数是一个指针类型的函数,它所指向的函数时一个比较函数。带两个void*参数,返回比较过后的结果。
3、通用二分查找源码(c):
#include
void* bsearch ( void* key, void* base, int num, int size, int (*compar)(const void*,const void*))
{
int low = 0;
int high = num-1;
int mid;
while (low <= high)
{
mid = (low + high) >> 1;
if (compar(key, (char *)base + mid * size) == 0) {
break;
}
else if (compar(key, (char *)base + mid * size) < 0) {
high = mid-1;
}
else {
low = mid+1;
}
}
if (low <= high)
{
return (char *)base + mid * size;
}
return NULL;
}
int compare_int( void *elem1, void *elem2)
{
return *(int *)elem1 - *(int *)elem2;
}
int main()
{
int a[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};