二分查找法(循环与递归分别实现)
2010-04-23 21:23
267 查看
心血来潮,编了一个二分查找法,使用了两种方法,一个是循环,一个是递归
自己检查过,算法没有问题,希望大家一起学习,如有bug请联系我,谢谢!
自己检查过,算法没有问题,希望大家一起学习,如有bug请联系我,谢谢!
#include <iostream> using namespace std; //二分查找法(循环方法) int binery(int* data, int n, int f); //二分查找法(递归方法) int recursion(int* data, int l, int r, int f); int main(int argc, char *argv[]) { int data[12] = {1,2,3,4,5,6,7,8,9,10,11,12}; int result = binery(data, 12, 5); cout << "循环方法查找到的位置为:"<< result << endl; int result1 = recursion(data, 0, 11, -10); cout << "递归方法查找到的位置为:"<< result1 << endl; return 0; } //data 查找的数组 // n 数组长度 // f 要查找的数 // 查找失败返回-1 int binery(int* data, int n, int f) { int left = 0, right = n; int mid = right/2; //注意mid一定左边位置和右边位置之间,否则运行结束 while (left <= mid && right >= mid) { if (f == data[mid]) { return mid; } else if (f < data[mid]) { right = mid - 1; } else { left = mid + 1; } mid = (left + right)/2; } //没有找到 return -1; } //data 查找的数组 // l 数组段左边位置 // r 数组段右边位置 // f 查找值 // 查找失败返回-1 int recursion(int* data, int l, int r, int f) { int left = l, right = r; int mid = (left + right)/2; //注意mid一定左边位置和右边位置之间,否则运行结束 if (left <= mid && right >= mid) { if (f == data[mid]) { return mid; } else if (f < data[mid]) { right = mid - 1; return recursion(data, left, right, f); } else { left = mid + 1; return recursion(data, left, right, f); } }else{ //没有找到 return -1; } }
相关文章推荐
- 二分查找法(递归与循环实现)
- 解析分别用递归与循环的方式求斐波那契数列的实现方法
- 二分查找法的循环与递归实现及时间复杂度分析
- 二分查找法的C语言实现:递归与循环
- #DayOne#,分别用循环和递归的方式实现阶乘
- 二叉树的先序遍历,递归实现与循环实现
- 有三个线程ID分别是A、B、C,请有多线编程实现,在屏幕上循环打印10次ABCABC
- php实现无限级分类,通过循环和递归实现
- 1.递归和非递归分别实现求第n个斐波那契数。
- 在论坛中出现的比较难的sql问题:28(循环查询表来实现递归)
- 分别用for循环和while循环实现九九乘法表的正向打印和颠倒打印
- 初学者看过来:简单谈谈 C/C++ 递归的思想,实现,以及和循环的关系。
- 二叉树(前序,中序,后序,层序)遍历递归与循环的python实现
- 试编写一个函数,返回一颗给定二叉树在中序遍历下的最后一个节点(分别用递归和非递归实现)
- 二分查找 递归实现 和 循环实现
- 分别使用一般递归的方法和模板元编程实现台阶问题。
- 保存图片到本地,查看本地图片,递归实现scrollView的无限循环滚动,文字横向渐变效果,autoLayout
- Ackerman函数A(m, n)的递归和循环实现
- Java(二分查找算法实现,分别使用递归和非递归方式)
- 判断是否为2的幂||输出一个整数二进制格式中1的个数 非循环非递归实现