• 2021-04-14
    4.试将折半查找的算法改写成递归算法。Itbisearch(sqlistL,itlow,ithigh,elemtypex){If(lowhigh)retur(0else{if(L.data[mid]==x)retur(mid);elseif(L.data[mid]x)bisearch(L,low,mid-1,x);elsebisearch(L,mid+1,high,x);}}//bisearch
  • mid=(low+high)/2

    举一反三

    内容

    • 0

      二分查找的递归实现,请选择正确的选项将函数补充完整。顺序表定义如下:typedef int datatype; /*假设数据类型为整型*/typedef struct { datatype data[100]; /*此处假设数据元素只包含一个整型的关键字域*/ int len; /*线性表长度*/ } slist; /*预定义的顺序表类型*/函数定义如下:int binsearch(slist L,datatype key,int low,int high){ int mid,k; if ( (1) ) return -1; /*检索不成功的出口条件*/ else { mid=(low+high)/2; /*二分*/ if ( (2) ) return mid; /*检索成功返回*/ if (L.data[mid]>key) return (3) ;/*递归地在前半部分检索*/ else return binsearch(L,key,mid+1,high); /*递归地在后半部分检索*/ }}

    • 1

      折半查找中,如果左边界是low,右边界是high,中间位置是mid则如果key A: high=mid-1 B: high=mid+1 C: low=mid-1 D: low=mid+1

    • 2

      折半查找,完善以下程序: #include main() { int a[10]={1,3,5,7,9,11,13,15,17,19},k,low,high,mid,cnt; low=0;high=9;cnt=0; printf("请输入要查找的数:"); scanf("%d",&k); while( 空1 ) { cnt++; mid=(low+high)/2; if(k == a[mid]) break; else if(k > a[mid]) 空2 空3 }

    • 3

      设low和high分别是在有序表中折半查找的指针,如果查找的关键字Key大于low和high的中间值mid所指的关键字,则正确缩小查找区间的是( )。 A: high=mid+1 B: high=mid C: low=mid+1 D: low=mid

    • 4

      若多项式$p(x)\mid f(x)g(x)$, 则$p(x)\mid f(x)$ 或 $p(x)\mid g(x)$。