自主编程实现二分法查找

    今天出去笔试,遇到一道题目让我们用二分法查找一已排好序的数组中的数据,并返回该数据的位置,这

是我第一次碰到使用二分法的编程题,一开始还是有点小慌得,毕竟之前没有写过,怕有些注意点没法试卷中

检测出来,不过二分法的概念还是很好理解的,主要思想是:(设查找的数组区间为a[front, end])

(1)确定该区间的中间位置K
(2)将查找的值T与a[k]比较。若相等,查找成功返回此位置;否则确定新的查找区域,继续二分查找。
自己也是没多会儿便写好了该编程题,但是后来回想起来,发现还是有几个细节没处理好:
(1)递归时没有判断传入数组的有效性
(2)没有考虑查找的数不在该数组中的情况
于是自己回来重新编写了一个完整并且没有漏洞的二分法查找代码,如下(分递归和不递归实现两种方法):
#include  
#include   
#define N  10  
  
//递归算法  
int GetPosi(int *a,int nNum,int front,int end)  
{  
    static int mid ;  
    assert(NULL != a) ;  
      
    if(front >= end)  
    {  
        return 0 ;  
    }  
    
    if(nNum == a[front])
    {
    	return 1 ;
    }
      
    mid = (front+end)/2 ;  
    if(mid == front)  
    {  
        mid=mid+1 ;  
    }  
      
    if(a[mid] == nNum)  
    {  
        return mid+1 ;  
    }     
    else if(a[mid]nNum)  
    {  
        end = mid ;  
        return GetPosi(a,nNum,front,end) ;  
    }  
          
}  
  
  
int main()  
{  
   int a[N] = {1,2,3,4,5,6,7,8,9,10} ;  
   int nNum ;  
   int front,end,mid;  
   printf("请输入您想查询的数字:");   
   scanf("%d",&nNum) ;  
   front = 0 ;  
   end = N-1 ;  
     
   //未用递归   
   /*mid = (front+end)/2 ;  
   while((frontnNum) 
        { 
            end = mid ; 
            mid =(front+mid)/2 ; 
        } 
        else if(a[mid]





你可能感兴趣的:(开拓思维编程)