二分法(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小于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;
}


版权声明:本文为your_dear_friend原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。