有15个数按从大到小顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则打印出 “无此数”
/* * Copyright (c) 2012, 烟台大学计算机学院 * All rights reserved. * 作 者: 刘同宾 * 完成日期:2012 年 11 月 27 日 * 版 本 号:v1.0 * 输入描述: * 问题描述:有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 data 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; //sign 为假表示尚未找到 top=0; //top 是查找区间的起始位置 bott=n-1; //bott 是查找区间的最末位置 if((number<a[0])||(number>a[n-1]))//要查的数不在查找区间内 { loca=-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; //只需从下标为0~mid-1的范围中找 } else //如果要查找的数不小于中间元素的值 top=mid-1; //只需从下标为mid-1~bott的范围找 } if((!sign)||loca==-1) //sign为假或者loca=-1,意味着找不到 { cout<<number<<"无此数!(has not found)"<<endl; } cout<<"继续查找还是?(continue or not(Y/N))"; cin>>c; if(c=="n"||c=="N") { flag=false; //flag为开关变量,控制程序是否结束运行。 } } return 0; }

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。