一个典型算法
算法:当数据量很大时宜采用此方法。使用前提:使用二分查找时,数据是排好序的。
基本思想:假设数据是升序的,对于给定的n,从序列的中间位置mid开始比较,
如果数组为arr[10],则mid=(0+9)/2; mid 为数组的角标;
如果 当前位置arr[mid]等于n,则查找成功;
若n小于arr[mid],则在数组的前半段查找,arr[left,mid-1];
若n大于arr[mid],则在数组的后半段查找,arr[mid+1,ringht];
然后再重新结算mid的值,比如 n小于arr[mid],则第二次mid =(left+mid-1)/2;
然后再次比较;重复,直到找到n为止,或者找不到。
#include <stdio.h>
void EF(int arr[],int sz,int n){ //如果查找到了则输出YES;
int left=0;
int right=sz-1;
while(left<=right){
int mid=(left+right)/2;
if(n<arr[mid]) right=mid -1;
else if(n>arr[mid]) left=mid+1;
else {
printf("YES\n");
break;
}
}
if(left>right) printf("NO\n"); //没查找到,跳出循环,输出NO;
}
int main()
{
int n,m; int i,j;
scanf("%d %d",&n,&m);
int arr[n];int arr2[m];
for(i=0;i<n;i++){
scanf("%d",&arr[i]);
}
for(i=0;i<m;i++){
scanf("%d",&arr2[i]);
EF(arr,n,arr2[i]);
}
return 0;
}
今天的文章二分法(c语言)分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/25204.html