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