#include <iostream>
#include <cmath>
#include <string>
using namespace std;
int find_x(int A[],int n,int x) //主要是函数的定义,弄清楚二分法原理。
{
int low=0,up=n-1,medium;
while (low<=up) //判定条件是难点!
{
medium= low+(up-low)/2;
if (A[medium]>x) up=medium,up++;
else if (A[medium]<x) low=medium,low--;
else return medium;
}
return -1; //代表找不到。
}
int main()
{
#define n 10
int i,x,A[n],index; //主函数主要是输入输出,调用函数。
cout<<"请输入十个数:"<<endl;
for (i=0; i<n;i++) cin>>A[i];//循环输入十个数。
cout<<endl; //换行。
cout<<"请输入你要查找的值:" ;
cin>>x; // 输入要查找的数值。
index=find_x(A,n,x); //调用函数。
cout<<x<<"的位置在A["<<index<<"]";//输出位置。
return 0;
} //成功!
二分法原理:
有很多数值按从小到大排列或者从大到小排列,首尾两值不是所要找的,那就找中间位置的值,不断缩小范围,
考虑到有可能要找的数不在数组中,需要找一个判断范围,循环到什么时候说明找不到了?
最后就是效果图了:
注意别输入错误数据