二分查找的循环版本和递归版本
来源:互联网 发布:封装继承多态java 编辑:程序博客网 时间:2024/06/08 10:32
二分查找是在有序的表中查找一个元素是否存在,时间复杂度为对数级别,在很多题目中都有它的变体,来复习一下它的递归版本实现和非递归版本。
代码以及测试函数:
#include <iostream>using namespace std;// 非递归版本int BinaryNorRec(int array[], int size, int key){int mid = -1;int left = 0;int right = size - 1;while (left <= right){mid = (left + right) / 2;if (array[mid] == key){return mid;}else if (array[mid] < key){left = mid + 1;}else{right = mid - 1;}}if (left > right)return -1;}// 非递归int BinaryRec(int arr[], int left, int right, int key){int mid = -1;if (left <= right){mid = (left + right) / 2;if (arr[mid] == key)return mid;else if (arr[mid] < key)return BinaryRec(arr, mid + 1, right, key);elsereturn BinaryRec(arr, left, mid - 1, key);}return mid;}// 测试递归版本void TestBinaryRec(){int array[] = { 4, 5, 6, 7, 8, 9, 10, 11 };int size = sizeof(array) / sizeof(array[0]);cout << "find: 4 " << BinaryRec(array,0, size-1, 4) << endl;cout << "find: 5 " << BinaryRec(array,0, size-1, 5) << endl;cout << "find: 6 " << BinaryRec(array,0, size-1, 6) << endl;cout << "find: 7 " << BinaryRec(array,0, size-1, 7) << endl;cout << "find: 8 " << BinaryRec(array,0, size-1, 8) << endl;cout << "find: 9 " << BinaryRec(array,0, size-1, 9) << endl;cout << "find: 10 " << BinaryRec(array,0, size-1, 10) << endl;cout << "find: 11 " << BinaryRec(array,0, size-1, 11) << endl;cout << "find: 12 " << BinaryRec(array,0, size-1, 12) << endl;cout << "find: 3 " << BinaryRec(array,0, size-1, 3) << endl;cout << "find: -1 " << BinaryRec(array,0, size-1, -1) << endl;//find: 4 0//find: 5 1//find: 6 2//find: 7 3//find: 8 4//find: 9 5//find: 10 6//find: 11 7//find: 12 -1//find: 3 -1//find: -1 -1}// 测试非递归版本void TestBinarySearch(){int array[] = { 4, 5, 6, 7, 8, 8, 9, 10, 11 };int size = sizeof(array) / sizeof(array[0]);cout << "find: 4 " << BinaryNorRec(array, size, 4) << endl;cout << "find: 5 " << BinaryNorRec(array, size, 5) << endl;cout << "find: 6 " << BinaryNorRec(array, size, 6) << endl;cout << "find: 7 " << BinaryNorRec(array, size, 7) << endl;cout << "find: 8 " << BinaryNorRec(array, size, 8) << endl;cout << "find: 9 " << BinaryNorRec(array, size, 9) << endl;cout << "find: 10 " << BinaryNorRec(array, size, 10) << endl;cout << "find: 11 " << BinaryNorRec(array, size, 11) << endl;cout << "find: 12 " << BinaryNorRec(array, size, 12) << endl;cout << "find: 3 " << BinaryNorRec(array, size, 3) << endl;cout << "find: -1 " << BinaryNorRec(array, size, -1) << endl;// 打印结果//find: 4 0//find: 5 1//find: 6 2//find: 7 3//find: 8 4//find: 9 5//find: 10 6//find: 11 7//find: 12 -1//find: 3 -1//find: -1 -1}int main(){TestBinarySearch();cout << endl; // 换行TestBinaryRec();return 0;}
阅读全文
0 0
- 二分查找的循环版本和递归版本
- 二分查找的递归版本及非递归版本
- 二分查找的循环和递归方法
- 二分查找模板总结(递归与循环遍历两个版本)
- 二分查找的一个版本
- 两个版本的二分查找
- 二分查找的循环实现和递归实现
- 二分查找的两种实现方式--循环和递归
- 二分查找 递归实现 和 循环实现
- 二分查找和递归的二分查找
- 递归和非递归的二分查找
- 二分查找的递归和非递归
- Add Two Numbers[leetcode]递归版本和循环版本
- 算法 之二分查找的各种版本
- 二分查找的最全版本
- 二分查找的实现---java版本
- 两种版本的二分搜索(递归+非递归)
- 排列的递归和非递归版本
- Jeesite1.2.7中ckeditor3.6.4版本的flash改为支持mp4视频格式
- C和指针介绍
- HBase建表高级属性,hbase应用案例看行键设计,HBase和mapreduce结合,从Hbase中读取数据、分析,写入hdfs,从hdfs中读取数据写入Hbase,协处理器和二级索引
- 为了明天的自己
- 【旧资料整理】windows7 配置快速启动栏的一点方法和技巧
- 二分查找的循环版本和递归版本
- Excel VBA高效办公应用-第十五章-VBA在生产预测与经营分析中的应用
- 【旧资料整理】xampp v1.7 配置虚拟主机
- 关于Python的学习
- 【旧资料整理】解决zend framework错误 Uncaught exception 'Zend_Controller_Dispatcher_Exception' with messa
- 【旧资料整理】smarty中数值作加减法运算
- 面试复习——Android工程师之Android面试大纲
- mybatis学习之与Spring整合
- Unity中实现UI跟随