递归入门(七) ---- 二分查找
2014-07-09 11:27
141 查看
在一个有序的数列中找到一个元素,我比较喜欢用二分,
就比如说:
1 3 5 7 9 11 13 15 17 19。。。。。。。。。。。。。。。。。
想在这里找到5怎么最快,应该是二分查找,首先排序,然后首先比较中间的和要查找的是否一样如果一样就输出,
如果大于中间的数,就在mid+1和最大的数之间进行查找,依次递归。
如果小于中间的数,就在mid-1和最小的数之间进行查找,依次递归。
代码:
//二分查找
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int MAXN = 1000;
int bin_search(int *p, int low, int high, int key)
{
int mid;
mid = (low + high)/2;
if(p[mid] == key)
return 1;
if(low > high)
return 0;
if(key > p[mid])
return bin_search(p, mid+1, high, key);
else
return bin_search(p, low, mid-1, key);
}
int main()
{
int a[1000];
for(int i=0; i < 1000; i++)
a[i] = i;
cout<<bin_search(a, 0, 999, 185)<<endl;
return 0;
}
就比如说:
1 3 5 7 9 11 13 15 17 19。。。。。。。。。。。。。。。。。
想在这里找到5怎么最快,应该是二分查找,首先排序,然后首先比较中间的和要查找的是否一样如果一样就输出,
如果大于中间的数,就在mid+1和最大的数之间进行查找,依次递归。
如果小于中间的数,就在mid-1和最小的数之间进行查找,依次递归。
代码:
//二分查找
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int MAXN = 1000;
int bin_search(int *p, int low, int high, int key)
{
int mid;
mid = (low + high)/2;
if(p[mid] == key)
return 1;
if(low > high)
return 0;
if(key > p[mid])
return bin_search(p, mid+1, high, key);
else
return bin_search(p, low, mid-1, key);
}
int main()
{
int a[1000];
for(int i=0; i < 1000; i++)
a[i] = i;
cout<<bin_search(a, 0, 999, 185)<<endl;
return 0;
}
相关文章推荐
- Java实现折半查找(二分查找)的递归和非递归算法
- 二分查找递归实现
- 二分查找的递归和非递归实现
- Java实现折半查找(二分查找)的递归和非递归算法
- 漫谈递归:二分查找算法的递归实现
- Java实现折半查找(二分查找)的递归和非递归算法
- PHP 折半查找(二分查找) 递归与非递归法
- 二分查找——递归和非递归
- 用递归实现的二分查找
- C 二分查找 递归与非递归
- 二分查找的递归与1非递归算法
- 枚举、递归和二分查找
- java递归实现二分查找
- 二分查找的递归与非递归!
- Java实现折半查找(二分查找)的递归和非递归算法
- 二分查找递归和非递归实现
- java非递归二分查找
- 二分查找递归与非递归总结
- 漫谈递归:二分查找算法的递归实现
- Java实现折半查找(二分查找)的递归和非递归算法