[说明]
设计一个类模板Sample用于对一个有序数组采用二分法查找元素下标。
[c++程序]
#include<iostream. h>
#define Max 100 //最多元素个数
template<class T>
class Sample
T A [Max]; //存放有序数序
int n; //实际元素个数
Public:
Sample //默认构造函数
Sample(T a[] ,int i); //初始化构造函数
int seek(T c);
void disp
for (int i=0; i<n; i++)
cout<<A [i]<<" ";
cout<<endl;
;
template<class T>
Sample<T>::Sample(T a[],int i)
n=I;
for (int j=0; j<I; j++)
(1) ;
template<class T>
int Sample<T>::seek(T c)
int low=0,high=n-1,mid;
while( (2) )
mid=(low+high)/2;
if( (3) )
return mid;
else if ( (4) )
low=mid+1;
else
(5) ;
return-1;
void main()
char a[]="acegkmpwxz";
Sample<char>s(a,1.);
cout<<"元素序列:" ;s. disp();
cout<<"元素’g’ 的下标: "<<s. seek(’g’)<<endl;
参考答案:high=mid-1
解析: 在主函数中,首先由类模板实例化成Sample<char>模板类。空(1)所在处为构造函数的声明,将参数中的值赋值到类的成员变量中,所以空(1)应填入“A[j]=a[j]”。
成员函数seek()采用二分法查找元素下标,变量low和high分别表示查找区间的下标,如果查询到目标,则返回相应的下标,若没有查询到,则其结束的条件即空(2)的内容为“low<=high”。根据二分法的原理,当中间的元素恰好等于目标元素时,则返回其下标,所以空(3)应填入“A[mid]==c”; 若中间的元素小于目标元素时,则mid+1作为新的查找区间的起始下标,所以空(4)应填入“A[mid]<c”; 否则mid-1作为新的查找区间的结束下标,所以空(5)应填入“high=mid-1”。