二分查找——递归和非递归
2012-05-14 16:29
260 查看
#include <iostream> #include <assert.h> using namespace std; //二分查找,非递归形式 int binarySearch(int *a, int b, int e, int v) { assert(a != NULL); int *begin = a+b; int *end = a+e; int *mid; //异常处理 if (!a || b >= e) { return -1; } //折半查找 while (begin < end) { mid = begin + ((end - begin) >> 1); assert(*begin <= *mid && *mid <= *end); if (*mid > v) { end = mid; } else if (*mid < v) { begin = mid + 1; } else { return mid - a; } } return -1; } //递归实现二分查找 int BinSearch(int Array[],int low,int high,int key/*要找的值*/) { assert(Array != NULL); if (low<=high) { int mid = (low+high)>>1; if(key == Array[mid]) { return mid; } else if(key<Array[mid]) { return BinSearch(Array,low,mid-1,key); } else if(key>Array[mid]) { return BinSearch(Array,mid+1,high,key); } } else { return -1; } } void main() { int a[10] = {1,2,3,4,5,6,7,8,9,10}; int b = BinSearch(a,0,9,6); cout << b <<endl; }
相关文章推荐
- 二分查找(递归与非递归)
- 数据结构与算法分析(Java语言描述)(15)—— 二分查找(递归与非递归)
- 20140717 二分查找 递归和非递归
- C 二分查找 递归与非递归的实现代码
- C 二分查找 递归与非递归
- 二分查找 递归与非递归 编程之美写法
- 二分查找与斐波那契数递归与非递归的时间复杂度与空间复杂度
- 二分查找的递归和非递归
- 二分查找(递归与非递归)
- 二分查找(递归与非递归)
- 二分查找递归和非递归
- 二分查找的递归和非递归写法
- 二分查找(递归与非递归)
- 斐波那契数列和二分查找的算法(递归与非递归)
- 二分查找(递归和非递归写法)
- 二分查找——递归与非递归
- 递归和非递归的二分查找
- 二分查找,递归和非递归
- 二分查找递归和非递归
- 二分查找(递归与非递归)