二分查找算法

1730阅读 0评论2013-08-17 梦醒潇湘love
分类:C/C++


    下面是两份二分查找算法的代码,记在这里,方面查看。
    第一份代码:
  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. }

    
    


上一篇:斐波那契数列
下一篇:C programming : How does free know how much to free?