C语言数组的基础例题 二分法 为什么输入2,,6,3,8,0,19不行 而别的行
#include <stdio.h>
#define M 10
void main()
{
int a[M] = {1,5,2,7,9,6,3,8,0,19};
int low, mid, high, found, n;
low = 0;
high = M - 1;
found = 0;
printf("please input a number:\n");
scanf ("%d", &n);
while (low <= high)
{
mid = (low + high)/2;
if (n == a[mid])
{
found = 1; break;
}
else if (n > a[mid])
{
low = mid + 1;
}
else
high = mid - 1;
}
if (found == 1)
{
printf("the number is %d is %d", n, mid);
}
else
printf("is not this number!!");
}
答案:提问者你好,你的程序我粗看看出一个错误:二分法查找的目标须是已经排序的数据,你给出的样例数组显然不满足。
我现在测试不方便,请尝试将数组按从小到大的顺序排序后重新试试。
另外,不知道此程序的目的,但是显然有一种异常没有考虑,就是要比较的数据没在数组里,是不能指出其位置的(二分法自身并不能指出此异常,需自己处理——如果需要知道此输入数据的上下文位置)。
其他:没有懂你的具体意思 二分法查找,数列应该是一个排好序的数列
上一个:C语言中,while语句中如果有是 int y=10; while(--y);那么while中的判断条件是什么?
下一个:C++ 指针取字符串 已知: char *p = "This apple is red."; string s; 要求: 用指针将“apple”取出赋给s。