二分法(c语言)

二分法(c语言)一个典型算法算法:当数据量很大时宜采用此方法。使用前提:使用二分查找时,数据是排好序的。基本思想:假设数据是升序的,对于给定的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,从序列的中间位置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

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注