当前位置:编程学习 > C/C++ >>

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。

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,