二分查找算法

第一种方法:

递归版本:

Error_Code binary_search(const Ordered_list &the_list, const Key &target, int bottom, int top,  int &position)

{

  Key data;

     if (bottom < top){

    int mid = bottom + (top - bottom)/2;   //注意点

    the_list.retrieve(mid, data);

    if (data < target)

      return binary_search(the_list, target, mid+1, top, position);

    else

      return binary_search(the_list, target, bottom, mid, position);

  } else if (bottom > top){

    return not_present;

  } else {

    position = bottom;

    the_list.retrieve(bottom, data);

    if (data == target) return success;

    else return not_present;

  }

}

非递归版本:

Error_Code binary_search(const Ordered_list &the_list, const Key &target,  int &position)

{

  Key data;

  int bottom = 0;

  int top = the_lsit.size() - 1;

     while (bottom < top){

    int mid = bottom + (top - bottom)/2;   //注意点

    the_list.retrieve(mid, data);

    if (data < target)

      bottom = mid + 1;

    else

      top = mid;

  } 

  if (bottom > top){

    return not_present;

  } else {

    position = bottom;

    the_list.retrieve(bottom, data);

    if (data == target) return success;

    else return not_present;

  }

}

第二种方法:

递归版本:

Error_Code binary_search(const Ordered_list &the_list, const Key &target, int bottom, int top,  int &position)

{

  Key data;

     if (bottom <=  top){

    int mid = bottom + (top - bottom)/2;   //注意点

    the_list.retrieve(mid, data);

    if (data == target){

      position = mid;

      return success;

    }else if (data < target)

      return binary_search(the_list, target, mid+1, top, position);

    else

      return binary_search(the_list, target, bottom, mid-1, position);

  } else {

    return not_present;

  }

}

非递归版本:

Error_Code binary_search(const Ordered_list &the_list, const Key &target,  int &position)

{

  Key data;

  int bottom = 0;

  int top = the_lsit.size() - 1;

     while (bottom <= top){

    position = bottom + (top - bottom)/2;   //注意点

    the_list.retrieve(mid, data);

    if (data == target){

      return success;

    } else if (data < target) {

      bottom = position+ 1;

    } else {

      top = position- 1;

    }

  } 

    return not_present;

}

你可能感兴趣的:(二分查找)