/*
* 程序的版权和版本声明部分:
* Copyright (c) 2012, 烟台大学计算机学院
* All rights reserved.
* 文件名称:折半查找法.cpp
* 作 者:毛通
* 完成日期:2013 年 1月14 日
* 版 本 号:v1.0
* 对任务及求解方法的描述部分: 有15个数按由小到大的顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值,如果该数不在数组中,则打印出“无此数”
* 输入描述:无
*/
/*
有15个数按由小到大的顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值,如果该数不在数组中,则打印出“无此数”
*/
# include <iostream>
using namespace std;
int main()
{
const int n=7;
int i,number,top,bott,mid,loca,a[n];
bool flag=true,sign;
char c;
cout<<"enter data:"<<endl;
cin>>a[0];
i=1;
while (i<n)
{
cin>>a[i];
if(a[i]>=a[i-1])
i++;
else
cout<<"enter this again:";
}
cout<<endl;
for(i=0;i<n;i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
while (flag)
{
cout<<"input number to look for:";
cin>>number;
sign=false;
top=0;
bott=n-1;
if((number<a[0])||(number>a[n-1]))
loca=n-1;
while ((!sign)&&(top<=bott))
{
mid=(bott+top)/2;
if(number==a[mid])
{
loca=mid;
cout<<"Find"<<number<<",its position is"<<loca+1<<endl;
sign=true;
}
else if(number<a[mid])
bott=mid-1;
else
top=mid+1;
}
if(!sign||loca==1)
cout<<number<<"has not found."<<endl;
cout<<"continu or not(Y/N)?";
cin>>c;
if(c=='N'||c=='n')
flag=false;
}
return 0;
}