二分查找(递归和非递归)
来源:互联网 发布:航天信息的开票软件 编辑:程序博客网 时间:2024/05/03 04:46
/*
二分查找也叫折半查找,要求查找的序列必须是有序的。
1.将给定的关键字与中间位置的纪录比较,如果相等则查找成功.
2.若不等则利用关键字的位置对表分成前后两个字表,如果key比中间位置关键字小,
则下一次只在前一子表中继续查找,否则在后一子表中查找
3.重复1.2 知道查找成功,或者当前查找区间为空,则查找失败
二分查找也可以递归
*/
//非递归
#include <iostream>
#define MAXSIZE 15
using namespace std;
int Binarysearch1(int a[],int x,int low,int high)
{
int mid = (low + high)/2;
while(low <= high)
{
if(x == a[mid])return mid;
else
if(x < a[mid])high = mid - 1;
else
low = mid + 1;
mid = (low + high)/2;
}
return 0;
}
int Binarysearch2(int a[],int x,int low,int high)
{
if(low <= high)
{
int mid = (low + high) / 2;
cout<<mid<<endl;
if(x == a[mid])return mid;
else
if(x < a[mid])
return Binarysearch2(a,x,low,mid - 1);
else
return Binarysearch2(a,x,mid + 1,high);
}
else
return 0;
}
int main()
{
int a[MAXSIZE] = {0,7,9,10,15,23,30,35,36,41,43,49,60,70,80};
int pos;
int x = 41;
cout<<"非递归"<<endl;
pos = Binarysearch1(a,x,1,MAXSIZE-1);
if(pos != 0)
cout<<"要查找元素的位置为:"<<pos<<endl;
else
cout<<"要查找的元素不存在!"<<endl;
cout<<"递归"<<endl;
pos = Binarysearch2(a,x,1,MAXSIZE-1);
if(pos != 0)
cout<<"要查找元素的位置为:"<<pos<<endl;
else
cout<<"要查找的元素不存在!"<<endl;
return 0;
}
- 二分查找(递归和非递归)
- 二分递归查找和非递归查找
- 二分查找递归和非递归实现
- 二分查找算法 递归和非递归
- 递归和非递归的二分查找
- 二分查找递归和非递归实现
- 二分查找递归和非递归实现
- 二分查找递归和非递归
- 二分查找-递归和非递归
- 二分查找,递归和非递归
- 二分查找递归和非递归实现
- 二分查找递归和非递归
- 递归和非递归实现二分查找
- 二分查找的递归和非递归
- 二分查找算法递归和非递归实现(C++)
- 二分查找算法(递归和非递归)
- c++二分查找实现(非递归和递归方式)
- 二分查找算法(递归和非递归)
- 使用smarty模板或缓存实现页面静态化
- 淘宝技术发展(Java时代:创造技术-Tair)
- Linux 系统如何修改主机名 (Linux how to change host name)
- 淘宝技术发展(分布式时代:服务化)
- 用户登陆权限设计
- 二分查找(递归和非递归)
- lua与c++的相互调用、C/C++修改Lua中Table的内容
- ARM9之NAND FLASH总结
- struts2中的日期期输入显示问题
- dijkstra算法优化
- javascript DOM对象
- matlab基础学习(2)之求多项式的根
- 匹配中文
- 利用fscanf和fprintf实现文件读取和写入