有15个数按由大到小的顺序存放在一个数组中,输入一个数,要求用折半查找法找出数是数组中第几个元素的值。如果该数不在数组中。则打印出“无此数”
虽然又是没教过的东西。。不过好歹看名字都能猜要怎样做。。。不过。。。。花了好长时间都。。。写不出算法- -。。N N D原来要分上下部分的。。之后就简单多了
- #include <iostream>
- #include<cmath>
- #include<iomanip>
- using namespace std;
- int main()
- {
- const int b=10;//数据长度1开始计算
- int aa[b];
- int a,m=0,kais,jies,mid;
- bool f=true,t;
- char d;
- cout<<"请输入数组,从大到小排列"<<endl;
- for(m=1;m<=b;m++)
- cin>>aa[m];
- cout<<endl;
- do{
- cout<<"请输入查询的号码:";
- cin>>a;
- cout<<endl;
- m=0;
- t=false;
- kais=1;
- jies=b;
- if((a>aa[kais])||(a<aa[jies])) m=-1;
- while((!t)&&(kais<=jies))
- {
- mid=(kais+jies)/2;
- if(a==aa[mid])
- { m=mid;
- cout<<a<<"的位置在第"<<m<<" "<<endl;
- t=true;
- }
- else if (a>aa[mid])
- jies=mid-1;
- else
- kais=mid+1;
- }
- if((!t)||(m==-1))
- cout<<"查无此数"<<endl;
- cout<<"继续查找吗?(Y/N)";
- cin>>d;
- if(d=='n'||d=='N'){f=false;}
- }while(f);
- }
转载于:https://blog.51cto.com/flzt5354/513740