二分查找完整代码:
#include<iostream>
using namespace std;
void * bsearch(const void *key, const void *base, size_t nel, size_t width, int (*cmp)(const void *, const void *)){
void *mid = NULL;
int sign;
while (nel > 0) {
mid = (char *)base + width*(nel/2);
sign = cmp(key, mid);
if (sign == 0) return mid;//找到
if (nel == 1) break;
else if (sign < 0)
nel /= 2;//下取整
else {
base = mid;
nel -= nel/2;//上取整
}
}
return NULL;
}
int compare(const void *val1, const void *val2) {
int iVal1 = *(int*)val1;
int iVal2 = *(int*)val2;
if (iVal1 > iVal2) {
return 1;
}
else if (iVal1 == iVal2) {
return 0;
}
return -1;
}