N个有序整数数列已放在一维数组中,给定的下列程序中,函数fun()的功能是:利用折半查找法查找整数m在数组中的位置。若找到,则返回其下标值;反之,则返回“Not be found!”。 折半查找法的基本算法是:每次查找前先确定数组中待确定的范围:lo

admin2012-06-08  39

问题 N个有序整数数列已放在一维数组中,给定的下列程序中,函数fun()的功能是:利用折半查找法查找整数m在数组中的位置。若找到,则返回其下标值;反之,则返回“Not be found!”。
   折半查找法的基本算法是:每次查找前先确定数组中待确定的范围:low和high(low<high),然后把m与中间位置(mid)中元素的值进行比较。如果m的值大于中间位置元素中的值,则下一次的查找范围放在中间位置之后的元素中;反之,下次查找范围落在中间位置之前的元素中,直到low>high,查找结束。
   [注意] 部分源程序给出如下。
   请勿改动主函数main和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。
   [试题源程序]
   #include  <stdio.h>
   #define  N 10
   int fun(int a[],int m)
   {
   int low=0, high=N-1, mid;
   while(low<=high)
   {
   mid=  (1)  ;
   if(m<a[mid])
   high=  (2)  ;
   eise
   if(m>a[mid])
   low=mid+1;
   else
   return(mid);
   }
     (3)  (-1);
   }
   main()
   {
   int i, a[N]=(-3, 4, 7, 9, 13, 24, 67, 89, 100, 180), k, m;
   printf("a数组中的数据如下: ");
   for(i=0; i<N; i++);
   printf("%d", a);
   printf("Enter m: ");
   scanf("%d", &m);
   k=fun(a, m);
   if(k>=0)
   printf("m=%d, index=%d\n", m, k));
   else
   printf("Not be found\n");
   }

选项

答案[1] (low+high)/2 [2] mid-1 [3] return

解析 填空1:根据题目的意思,这里应该是确定折半查找的中间位置,所以很明显应该填(low+high)/2。注意,这个式子返回的是整型数据,即如果分子为7,则结果为3。
   填空2:根据题目的意思,中间的元素值大时应该选择前半段进行下次查找,所以应该把mid前一位的下标赋值给high。
   填空3:由算法可以看出,这里应该是所有转换完毕仍然没有找到满足条件的地方,即应该返回-1,所以使用关键字“remm”。
转载请注明原文地址:https://kaotiyun.com/show/EDID777K
0

相关试题推荐
最新回复(0)