我写了两个函数:
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
答案 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;
}