输入n(n<100)个有序正数,请用折半查找算法,查找x在其中的位置。
输入:5 1,2,3,4,5 2
输出:2
注:测试集合中,x数一定在正数数组中。即不用处理错误逻辑。
#include <stdio.h> int main() { int n, i; int series[100]; int t; int right, left, middle; //输入 scanf_s("%d", &n); for (i = 0; i < n; i++) { scanf_s("%d,", &series[i]); } scanf_s("%d", &t); //初始化 left = 0; right = n - 1; middle = (n - 1) / 2; //二分法查找 while (series[middle] != t) { if (series[middle] < t) right = middle; else left = middle; middle = (left + right) / 2; } printf("%d", middle); return 0; }
好吧,上面的代码还是运行不了(似曾相识)。
调试的时候发现数组元素的输入没有成功,但是没有找到错误的原因。
然后我在网上找到了小刘同学分享的代码。
点击跳转到:折半查找
#include <stdio.h> int main() { int num[100]; int a,b,flag,i=0; scanf("%d",&a); for(i=0;i<a;i++) { scanf("%d,",&num[i]); } scanf("%d",&b); int left=0,right=a-1; while(left<=right) { flag = (left+right)/2; if(b==num[flag]) { printf("%d",flag+1); break; } if(num[flag] > b) right = flag-1; else if(num[flag] < b) left = flag+1; } }
我对比了一下,除了二分查找的实现部分,前面的不TM是一样的吗。。。
大家来找找错误。