在2个短函数之间循环

时间:2012-01-04 08:52:25

标签: c

我写了两个函数: PrintIdentical - 接收2个数组及其大小 - 对它们进行排序,然后调用函数 bin_search_print需要从大数组中的小数组中搜索每个元素,如果找到则打印它。 我有一个错误 - bin_search_print函数找到第一个元素并在循环中打印第一个元素而不到达其他元素。

void bin_search_print(int key,int *a,int n)
{
    int low,high,mid;
    low=0;
    high=n-1;
    while(low <= high)
    {
        mid=(low+high)/2;
        if(key==a[mid])
            printf ("%d", mid);
        return mid;
        else if(key<a[mid])
            high=mid-1;
              else   /* key >a[mid] */
            low=mid+1;
    }
    return -1;
}

void PrintIdentical(int arrA[], int arrA_size, int arrB[], int arrB_size)
{
    int i;
    int smaller;
    int *newarr;
        merge_sort(arrA, 0, arrA_size);
        merge_sort(arrB, 0, arrB_size);

         if(arrA_size>arrB_size)
         {
          smaller=arrB_size;
                 for(i = 0; i < smaller; i++) {     
                    bin_search_print(arrB[i], arrA, arrA_size+1);
                 }
         }
         else
          {
          smaller=arrA_size;
                 for(i = 0; i < smaller; i++) {     
                    bin_search_print(arrA[i], arrB, arrB_size+1);
                 }
         }

}

A[1,2,3,4,5]
B[1,4,3,9]

我需要打印1 4 3

2 个答案:

答案 0 :(得分:0)

bin_search_print在printf之后缺少一个返回。

if (key == a[mid]) {
  printf("%d", key);
  return;
} else {
  if (key < a[mid]) {
    high = mid - 1;
  } else {
    /* key > a[mid] */
    low = mid + 1;
  }
}

附加说明: bin_search_print声明为void,不应返回值。

请在if语句中使用花括号!

请打开编译器警告。

答案 1 :(得分:0)

这是因为一旦找到钥匙,就不会退出循环。

while(low <= high)
{
    mid=(low+high)/2;
    if(key==a[mid])
        printf ("%d", key);   //<-- okay found key, now look carefully at the logic
    else if(key<a[mid])
        high=mid-1;
          else   /* key >a[mid] */
        low=mid+1;
}