二分法查找
第1行输入一个整数n(1≤n≤1000),第2行输入n个由一个空格分隔的int整数到一个数组中,第3行输入一个int整数m。使用二分查找算法找出m是排序后数组中的第几个元素(这里计数从1开始)。找不到时,输出“not found”。
假设输入时数组中的各个元素值均不相同,且已经按升序排序。
题目如上所示。
#include <stdio.h>
#include <stdlib.h>
int main ()
{
int n,m,s[30000],i=0,j;
scanf("%d",&n);
for (i=0; i<n; i++)
{
scanf("%d", &s[i]);
}
scanf("%d",&m);
j=(n+i)/2,i=0;
while (getchar() != EOF)
{ if (i != j)
{ if (s[j] > m) n=j;
else if (s[j]<m) i=j;
else printf("%d",++j);break;
}
else printf("not found");
}
return 0;
}
这是我写的程序。没有error和warning,但是结果有问题。麻烦大神们帮忙看看错误在哪,还有如何改进来简化过程。
ps.我是C语言新手...请不要用库函数!感谢!