二分查找

来源:互联网 发布:欧美最美女星知乎 编辑:程序博客网 时间:2024/06/08 09:17
#include<stdio.h>int BinaryFind(int *a,int n,int data)  //非递归实现{  if(a==NULL||n<=0)     return -1;  int begin=0;  int end=n-1;  while(begin<=end)   {     int mid=begin+(end-begin)/2;     if(a[mid]==data)        return mid;     else if(a[mid]<data)        begin=mid+1;     else        end=mid-1;   }  return -1;}int BinaryRecursive(int*a,int begin,int end,int data) //递归实现二分查找{   if(a==NULL||begin>end)     return -1;   int mid=begin+(end-begin)/2;   if(a[mid]==data)     return mid;   else if(a[mid]<data)      return BinaryRecursive(a,mid+1,end,data); //注意return   else      return  BinaryRecursive(a,begin,mid-1,data);}int main(){  int a[]={1,2,3,5,6,7};  int n=sizeof(a)/sizeof(a[0]);  for(int i=0;i<n;i++)  {    printf("%d\n",a[i]);   }  printf("4 is in the line: %d\n",BinaryFind(a,n,4));  printf("5 is in the line:%d\n",BinaryRecursive(a,0,n-1,5));  return 0;}
0 0