Chinaunix首页 | 论坛 | 博客
  • 博客访问: 398929
  • 博文数量: 75
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 645
  • 用 户 组: 普通用户
  • 注册时间: 2015-06-03 18:24
文章分类

全部博文(75)

文章存档

2019年(1)

2018年(20)

2017年(14)

2016年(10)

2015年(30)

分类: C/C++

2016-10-30 11:27:03

二分查找需注意的事项:

1.如何判断查找完成,定义返回值含义,定义退出循环条件

2.如何处理边界问题,例如1 2 3 这个序列,当我们要查找1或者3时,会不会使程序出现BUG

3.对于数列来说,我们通常用整形存储其下标,二分查找若取下标中间数,则会出现什么样的问题?这些问题是否会影响我们的查找,若有问题,则应该如何规避?

下面是代码的实现:

点击(此处)折叠或打开

  1. #include<stdio.h>

  2. int bsearch(int data, int table[], unsigned int n)
  3. {
  4.     int lower = 0;
  5.     int upper = n - 1;
  6.     int midlle = 0;

  7.     /**/
  8.     if(n <= 0)
  9.     {
  10.         printf("para is invalid\n");
  11.         return -1;
  12.     }    

  13.     /**/
  14.     while(upper >= lower)
  15.     {
  16.         midlle = (upper + lower) / 2;

  17.         if(data > table[midlle])
  18.         {
  19.             lower = midlle + 1;
  20.         }
  21.         else if(data < table[midlle])
  22.         {
  23.             upper = midlle - 1;
  24.         }
  25.         else
  26.         {
  27.             printf("data:%d is in table[%d]\n", data, midlle);
  28.             return midlle;
  29.         }
  30.     }

  31.     printf("data:%d is not in table\n", data);
  32.     return -1;
  33. }

  34. int main(int argc, char **argv)
  35. {
  36.     int table[10] = {1,2,3,4,5,6,7,8,9,10};

  37.     int data = 0;

  38.     for(data = 0;data < 20;data++)
  39.     {
  40.         bsearch(data, table, sizeof(table) / sizeof(table[0]));
  41.     }

  42.     return 0;
  43. }


阅读(995) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~