#include <iostream>
using namespace std;
#define size 5
int main()
{
//声明变量
int i,j;
float t,a[size];
//从键盘上为数组赋值
for(i=0;i<size;i++)
{
cout<<"a["<<i<<"]=";
cin>>a[i];
}
//对数组按照从小到大顺序排序
for(i=0;i<size-1;i++)
for(j=i+1;j<size;j++)
if(a[i]>a[j])
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
//显示排序结果
for(i=0;i<size;i++)
cout<<a[i]<<" ";
cout<<endl;
//输入要查找的数据
int value;
int found;//找到为1,否则为0
int low,high,mid;
for(i=1;i<=3;i++)
cout<<"value=";
cin>>value;
//二分法查找数组a
found=0;
low=0;
high=size-1;
while(low<=high)
{
mid=(high+low)/2;
if(a[mid]==value)
{
found=1;
break;
}
if(a[mid]<value)
low=mid+1;
else
high=mid-1;
}
if(found)
cout<<"The value found at:a["<<mid<<"]="<<a[mid]<<endl;
else
cout<<"The"<<value<<"is not found!"<<endl;
}
请教这里面所有的size-1分别是为什么,以及为什么用二分法查找数据
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
关注 二分查找法是效率较高的一种查找方法。假设有已经按照从小到大的顺序排列好的五个整数a[0]~a[4],要查找的数是X,其基本思想是:
设查找数据的范围下限为l=1,上限为h=5,求中点m=(1+h)/2,用X与中点元素a[m]比较,若X等于a[m],即找到,停止查找;否则,若X大于a[m],替换下限l=m+1,到上半段继续查找;若X小于a[m],换上限h=m-1,到上半段继续查找;如此重复前面的过程直到找到或者l>h为止。如果l>h,说明没有此数,打印找不到信息,程序结束。
该方法是查找的范围不断缩小一半,所以查找效率较高。本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 如何在node.js中或者java中给wav格式的音频编码成sil格式呢
- ¥15 不小心不正规的开发公司导致不给我们y码,
- ¥15 我的代码无法在vc++中运行呀,错误很多
- ¥50 求一个win系统下运行的可自动抓取arm64架构deb安装包和其依赖包的软件。
- ¥60 fail to initialize keyboard hotkeys through kernel.0000000000
- ¥30 ppOCRLabel导出识别结果失败
- ¥15 Centos7 / PETGEM
- ¥15 csmar数据进行spss描述性统计分析
- ¥15 各位请问平行检验趋势图这样要怎么调整?说标准差差异太大了
- ¥15 delphi webbrowser组件网页下拉菜单自动选择问题