折半查找法找数

来源:互联网 发布:海量数据存储与管理 编辑:程序博客网 时间:2024/06/16 04:42

/* 
* 程序的版权和版本声明部分: 
* 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++;elsecout<<"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;elsetop=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;}