#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,说明没有此数,打印找不到信息,程序结束。
该方法是查找的范围不断缩小一半,所以查找效率较高。本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报