设为首页 加入收藏

TOP

c语言的通用二分查找算法
2013-07-22 17:57:33 来源: 作者: 【 】 浏览:218
Tags:语言 通用 二分 查找 算法

  [cpp]

  //

  /*

  二分查找是基于排好序的算法。复杂度低,并且很高效,

  由于项目中大量使用的了二分查找,但是又不能每个业务实现一个

  因此有必要实现一个通用的二分查找

  其主要思想:通过对已经排好序的数组,进行数据指针的比较。

  @const void *key 需要查找的key值

  @const void *base, 所要查找数据的首地址

  @int nmemb,所要查找的成员数量

  @int size, 每个元素的大小

  @int *piEqual,是否能查找到的标志查到为1,否则为0

  */

  int bsearch_int (const void *key, const void *base, int nmemb, int size, int *piEqual)

  {

  size_t l, u, idx;

  const void *p, *p2;

  int comparison, comparison2;

  *piEqual = 0;

  if (nmemb < 0) return -1;

  if (!nmemb) return 0;

  l = 0;

  u = nmemb;

  while (l < u)

  {

  idx = (l + u) / 2;

  p = (void *) (((const char *) base) + (idx * size));

  comparison = *(int *)key - *(int *)p ;

  if (comparison == 0)

  {

  *piEqual = 1;

  return idx;

  }

  else if (comparison < 0)

  {

  if (idx == 0) return idx;

  p2 = (void *) (((const char *) base) + ((idx - 1) * size));

  comparison2 = *(int *)key - *(int *)p2 ;

  if (comparison2 > 0) return idx;

  u = idx;

  }

  else /*if (comparison > 0)*/

  {

  l = idx + 1;

  }

  }

  return u;

  }

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C语言的数据类型转换 下一篇C语言题:IV---翻转字符串

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: