#include <stdio.h> #include <stdlib.h> #include <string.h> #define max 1000 int a[max]; int bisect(int a[],int n, int v)//定义二分查找函数 { int i,j,m; i=0;//i为开始 j=n-1;//j为结束 while(i<=j) { m=(i+j)/2;//m为i和j中间 if(v==a[m])//如果刚好查找到,返回 return m; if(v<a[m])//如果v小于中间的值,改变j,继续在小的那一半查找 j=m-1; else i=m+1;//否则在大的那一半查找 } return -1; } int main() { int n,v; while(scanf("%d",&n)!=EOF) { memset(a,0,sizeof(a));//初始化数组 int i; for(i=0;i<n;i++) { scanf("%d",&a[i]); } scanf("%d",&v);//要查找的元素 int x=bisect(a,n,v); printf("%d\n",x); } }
每次查找都尝试将此次的中间值和要查找的值做比较,如果小于中间值,则继续在较小的那一边查找,如果大于中间值,则改变i,在较大的一边查找。
EOJ 3178 二分查找
最新推荐文章于 2021-11-27 16:28:30 发布