【C++】二分查找的递归形式和非递归形式

来源:互联网 发布:qq空间推广淘宝店铺 编辑:程序博客网 时间:2024/05/17 03:07

二分查找

二分查找,又名折半查找,在有序数组中查找元素的效率很高;缺点就是只能查询有序表,因此适用于不用频繁插入删除的有序表

如果没有二分查找,通过遍历来查询表中元素的时间复杂度为O(N)

而二分查找时间复杂度为O(lgN)


以非递归的形式实现二分查找

//二分查找的非递归形式 int BinaryResearchNonR(int *arr,int left, int right, int key){ while (left <= right){int mid = left&right + ((left ^ right) >> 1);if (arr[mid] > key){right = mid - 1;}else if (arr[mid] < key){left = mid + 1;}else{return mid;}}//没有找到,返回-1 return -1;}

以递归的形式实现二分查找

//二分查找的递归形式 int BinaryResearch(int* arr, int left, int right, int& key)//这里我们传入引用,避免了值传递的拷贝过程{if (right < left)return -1;//求平均值,相同位加上不同位的一半就是整体的一半 int mid = (left&right) + ((left^right) >> 1);if (arr[mid] > key){return BinaryResearch(arr, left, mid - 1, key);}else if (arr[mid] < key){return BinaryResearch(arr, mid + 1, right, key);}else{return mid;}//没有找到,返回-1 return -1;}

测试函数

void TestBinartResearch(){int arr[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };int key = 9;int ret = BinaryResearch(arr, 0, 9, key);cout << ret << endl;} 


1 0
原创粉丝点击