您的位置:首页 > 其它

二分查找法(循环与递归分别实现)

2010-04-23 21:23 267 查看
心血来潮,编了一个二分查找法,使用了两种方法,一个是循环,一个是递归

自己检查过,算法没有问题,希望大家一起学习,如有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;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐