写一个函数,用二分法在已按从小到大排序的整型数组 list[ ] (数组包含len 个元素) 中查找一个整数 n,若 n 在数组中,函数返回数 n 在数组中的下标;否则返回 -1。所谓二分法查找是:初始查找区间的下界为 0,上界为 len - 1,查找区间的中间元素下标为 k = (下界 + 上界) / 2 ;若 list[k] 等于 n ,查找成功;若 list[k] > n,则新的查找区间的下界不变,上界改为 k - 1;否则新的查找区间的下界改为 k + 1,上界不变。在新区间内继续用二分法查找。
参考答案:
#include
#define SIZE B0
int search( int list[ ] , int n , int len )
{
int low = 0 , high = len-A , k ;
while ( low<=high ) {
k = ( low + high) / B ;
if ( list[k]==n) return k ;
else if ( list[k]>n) high = k-A ;
else low = k+A ;
}
return -A ;
}
main()
{
int a[SIZE],n;
int k;
for(int j = 0; j < SIZE; j++)
scanf(“%d”, a+j);
scanf("%d",&n);
k=search(a, n, SIZE);
if(k==-A) printf("the number %d is not in the array a\n",n);
else printf("the number %d is in the array a\n",n);
}
解析:
评分标准:
(A)定义及说明部分 B分
(B)数据输入 B分
(B)search函数 I分
(C)其它 B分