/******************************************************************
*  源程序名：ModelTask5_1_2.cpp                  　　　　　　      *
*  功能：已有一按从小到大次序排序好的数组，现输入一数，要求用      *
*  折半查找法找出该数在数组中的位置。如果没有，输出"没有找到！"。  *
*******************************************************************/
#include <iostream.h>
#define N 10           //便于程序扩展
void main()
{
	int a[N];          //下标范围0~N-1
	int low,mid,high;  //用于指向查找区域的低位、中间位置、及高位
	int num;           //用于存放要查找的数
	cout<<"请输入"<<N<<"个降序排列的数：";
	for (int i=0;i<N;i++)  //输入降序数列
		cin>>a[i];
	cout<<"请输入要查找的整数：";     //输入要查找的数
	cin>>num;
	low=0;             //设置查找的区间，开始时是全部
	high=N-1;
	mid=(low+high)/2;
	while (a[mid]!=num && low<high)//将查找的数与区间内的中间数进行比较
	{
		if (num>a[mid])
			low=mid+1;        //重新设置查找区间为原区间的后半部
		else
			high=mid-1;       //重新设置查找区间为原区间的前半部
		mid=(low+high)/2;     //重新设置中间的比较元素
	}
	if (num==a[mid])
		cout<<num<<"是第"<<mid+1<<"个元素。"<<endl;  //找到
	else
		cout<<"没有找到！"<<endl;                  //没找到
}

