设a[0:n-1]是已经排好序的数组。请改写二分搜索算法,使得当搜索元素x不在数组中时,返回小于x的最大元素位置i和大于x的最小元素位置j。当搜索元素在数组中的时候,i和j相同,均为x现在数组中的位置。
 
#include "iostream.h"
#include "iomanip.h"
#define max 100
template<class Type>
int BinarySearch( Type a[] , const Type &x , int n )
{
 int left , right , mid;
 left = 0;
 right = n - 1;
 while( left <= right )
 {
  mid = ( left + right ) / 2;
  if( x == a[mid] )
   return mid;
  if( x < a[mid] )
  {
   right = mid - 1;
  }
  else
  {
   left = mid + 1;
  }
 }
 return -1;
}
void main()
{
 int map[10] ;
 int i;
 cout<<"输入数组map:"<<endl;
 for(i=0;i<10;i++)
 {
  cout<<"map["<<i<<"]=";/* 输入进度提示 */
  cin>>map[i];/* 录入 */
  cout<<map[i]<<"\n";/* 顺序保存 */
 }
 int n = 10;
 int x;
 int j;
 cout<<"数列:"<<endl;
 for( j= 0 ; j < n ; j++ )
  cout<<setw(10)<<map[j];
 cout<<endl;
 cout<<"请输入想要搜索的数";
 cin>>x;
 //x = 3;
 int order = BinarySearch( map , x , n );
 if( order > 0 )
 {
  cout<<"指定数 "<<x<<" 处于第 "<<order+1<<" 位"<<endl;
 }
 else
 {
  cout<<"没有找到指定数 "<<x<<endl;
 }
}