【C++】顺序查找与折半查找(附带解说)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、顺序查找
#include
#define M 10
int search(int a[],int x,int n) //定义【查找函数】 定义形参为实型数组a[](被查找的数组) ,实型数x(需要查找的数) ,实型数n(数组内元素的个数)
{
int i;
for(i=0;i
return -1; //未找到,则返回给【主函数】-1
}
void main() //定义【主函数】
{
int array[]={1,45,85,12,36,2,49,6,13,8}; //初始化查找数组
int i,p,x;
cout<< "输入要查找的数:";
cin>>x;
p=search(array,x,M); //调用【查找函数】,同时接受返回值
cout<< "原始数组:" <
if(p>=0) cout<< "查找成功!该数的下标为:" << p <
2、折半查找
#include
#define M 10
int bi_search(int a[],int x,int n) //定义【查找函数】
{
int low=10,mid,up=n-1; //定义最低元素下标low,下标中间值mid,最高元素下标up
while(low<=up) //在最低元素与最高元素之间循环查找
{
mid=(low+up)/2; //计算比较中值下标
if(x==a[mid]) return mid; //将要查找的数同中间的元素对比,如果找到则输出mid值
else if(xelse low=mid+1; //如果所比较的元素比查找的大,则从元素值比较高的一方中查找
}
return -1; //未找到则输出-1
}
void main() //定义【主函数】
{
int array[]={1,2,4,5,23,41,54,56,69,78};//初始化查找数组,已按升序排列
int i,p,x;
cout<< "输入要查找的数:";
cin>> x;
p=bi_search(array,x,M);
cout<< "原始数组为:" <
if(p>=0) cout<< "查找成功!数组元素下标为:" << p <
}
//折半查找法相当于数学中的二分法,即,在已经按照升序排列的数列中,比较查找数与中间数的大小,大,则说明查找数可能在较大的一半中
//则最低比较元素low应当从mid+1开始,反之,则说明查找数可能在较小的一半中,则最高比较元素up应当从mid-1开始