Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2115501
  • 博文数量: 249
  • 博客积分: 1305
  • 博客等级: 军士长
  • 技术积分: 4733
  • 用 户 组: 普通用户
  • 注册时间: 2011-12-17 10:37
个人简介

不懂的东西还有很多,随着不断的学习,不懂的东西更多,无法消灭更多不懂的东西,那就不断的充实自己吧。 欢迎关注微信公众号:菜鸟的机器学习

文章分类

全部博文(249)

文章存档

2015年(1)

2014年(4)

2013年(208)

2012年(35)

2011年(1)

分类: C/C++

2013-08-17 21:14:35


    下面是两份二分查找算法的代码,记在这里,方面查看。
    第一份代码:
  1. int BinarySearch(int array[], int length, int target)
  2. {
  3.     assert(length > 0);

  4.     int lower = 0;
  5.     int upper = length - 1;
  6.     
  7.     while(lower <= upper)
  8.     {
  9.         int mid = lower + (upper - lower) / 2;
  10.         if(array[mid] == target)
  11.         {
  12.             return mid;
  13.         }
  14.         if(array[mid] > target)
  15.         {
  16.             upper = mid - 1;
  17.         }
  18.         else
  19.         {
  20.             lower = mid + 1;
  21.         }
  22.     }

  23.     return -1;
  24. }
    第二份代码:
  1. int BinarySearch2(int array[], int length, int target)
  2. {
  3.     assert(length > 0);

  4.     int lower = 0;
  5.     int upper = length;                        //1

  6.     while(lower < upper)                        //2
  7.     {
  8.         int mid = lower + (upper - lower) / 2;
  9.         
  10.         if(array[mid] > target)
  11.         {
  12.             upper = mid;                        //3
  13.         }
  14.         else if(array[mid] < target)
  15.         {
  16.             lower = mid + 1;
  17.         }
  18.         else
  19.         {
  20.             return mid;
  21.         }
  22.     }

  23.     return -1;
  24. }

    补充:设A[]是已经排好序的数组。请改写二分查找算法,使得当搜索元素x不在数组中时,返回小于x的最大元素位置i和大于x的最小元素位置j。当搜索元素在数组中时,i和j相同,均为x在数组中的位置。
  1. int BinarySearch(int array[], int length, int target, int *i, int *j)
  2. {
  3.     assert(length > 0);

  4.     int lower = 0;
  5.     int upper = length - 1;
  6.     
  7.     while(lower <= upper)
  8.     {
  9.         int mid = lower + (upper - lower) / 2;
  10.         if(array[mid] == target)
  11.         {
  12.             *i = mid;
  13.             *j = mid;
  14.             return 1;
  15.         }
  16.         if(array[mid] > target)
  17.         {
  18.             upper = mid - 1;
  19.         }
  20.         else
  21.         {
  22.             lower = mid + 1;
  23.         }
  24.     }
  25.     *i = upper;
  26.     *j = lower;

  27.     return 0;
  28. }

    
    


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