有15个数按从大到小顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则打印出 “无此数”

来源:互联网 发布:军事推演软件 编辑:程序博客网 时间:2024/05/21 10:02
/*         * 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++;}elsecout<<"再次输入这个数据(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;}

原创粉丝点击