The Fourth Dimension Space

枯叶北风寒,忽然年以残,念往昔,语默心酸。二十光阴无一物,韶光贱,寐难安; 不畏形影单,道途阻且慢,哪曲折,如渡飞湍。斩浪劈波酬壮志,同把酒,共言欢! -如梦令

C++ 中库函数bsearch的简单研究(含示例)

/*bsearch函数声明如下:

void *bsearch(const void *key, const void *base, size_t *nelem, 
              size_t width, int(*fcmp)(const void *, const *)); 

参数的意思和qsort的差不多,区别在于:
1. qsort用来排序,bsearch用二分法来查找元素
2. bsearch中的base必须是升序排列的数组!!!
3. 如果数组里有重复的答案,则bsearch会返回其中一个的地址 (具体返回哪一个不确定)
4. bsearch有五个自变量,第一个是要找的东西,剩下的跟qsort一模一样
5. bsearch如果没找到所求则回传NULL ,否则回传该元素被找到的地址(void *) 
*/




#include
<iostream>
#include
<cstdlib>
using namespace std;


int compare(const void*a,const void *b)
{
    
return *((int*)a)-*((int*)b);
}



int main()

{
    
int a[100];
    
int i;
    
for(i=0;i<100;i++)
        a[i]
=i+1;
    i
=50;
    
int *result;
    result
=(int*)bsearch((void*)&i,(void*)a,100,sizeof(a[0]),compare);
    cout
<<i<<' '<<*result<<endl;
    system(
"pause");
    
return 0;
}



值得特别注意的是:函数的第一个元素是一个地址变量,而不是一个int型或者是float型的变量。

posted on 2009-03-24 11:27 abilitytao 阅读(671) 评论(1)  编辑 收藏 引用

评论

# re: C++ 中库函数bsearch的简单研究(含示例) 2009-11-13 00:45 OwnWaterloo

nelem是size_t类型,不是size_t*
不一定是升序,也可以是降序,跟fcmp参数有关。
(void*)&i,(void*)&a是不必要的,(const)T*到const void*的转换可以是隐式的。

  回复  更多评论   


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理