马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
请问这种情况是咋回事啊?目前很崩溃#include <stdio.h>
#include <stdlib.h>
int num[] = {0, 10, 14, 21, 38, 45, 47, 53, 81, 87, 99};
int* binserach(int num[], int *);
int main()
{
int *result, flag = 0;
result = binserach(num, &flag);
if(flag != 0)
{
printf("查找成功,下标为%d\n", flag);
}
else if(*result == 0){
printf("没有更小的元素\n");
printf("比该数大的最小的元素下标为%d,对应元素为%d\n", *(result+1), num[*(result+1)]);
}else if(*result == 10){
printf("比该数小的最大元素的下标为%d, 对应元素为%d\n", *result, num[*result]);
printf("没有更大的数\n");
}else{
printf("%d--%d\n", *result, *(result + 1));
printf("对应元素为%d--%d\n", num[*result], num[*(result + 1)]);
}
return 0;
}
int* binserach(int num[], int *flag)
{
int low,high, mid, key, tab[2], *p = NULL;
*flag = 0;
high = 10;
low = 1; //零号空间空闲不使用
printf("输入查找值:\n");
scanf("%d", &key);
while(low <= high)
{
mid = (high + low) / 2;
if(num[mid] > key)
{
high = mid - 1;
tab[1] = mid;
}else if(num[mid] < key)
{
low = mid + 1;
tab[0] = mid;
}
else{
*flag = mid;
break;
}
}
if(tab[1] == 1)
tab[0] = 0;
if(tab[0] == 10)
tab[1] = 0;
if(*flag == 0)
{
p = tab;
return p;
}else
return 0;
}
代码是实现二分查找中未找到返回比带查找数字大的最小数字和比此数小的最大数字;若找到则返回下标。 |