问题 问答题

写一个函数,用二分法在已按从小到大排序的整型数组 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分

单项选择题
单项选择题