二分查找与递归算法

来源:互联网 发布:java中贪心算法 编辑:程序博客网 时间:2024/05/21 07:11

1.给一个有序数组a[],大小为n,且n非常大,求数组中是否存在k? 这里我们采用二分查找算法结合递归/循环,降低时间复杂度来求解。 

//二分查找的递归算法,k为要查找的数 

int recSearch(int a[],int low,int high,int k) {   

    int mid;    

    if (low >high)     return -1;    

    mid = low + (high - low)/2;   

    if (a[mid] == k )    return k;    

    else{        

         if (a[mid]>k)    high = mid -1;       

         else             low = mid + 1;         

         returnrecSearch(a, low, high, k);     

    }   

    return -1;  

//二分查找算法的非递归实现,k为要查找的数  

int search(int a[],int low,int high,int k) {   

    int mid;     

    while (low<=high) {              

       mid = low + (high - low)/2;            

       if (a[mid] == k )   return k;      

       elseif (a[mid]>k)           

           high = mid -1;       

       else          

           low  = mid +1;    

    }       

    return -1

 }


2.计算从原点到达(m,n)的走发数 

int road (int m, int n) {   

   if (n<0 || m<0) {       

      return -1;    

   }elseif( m==0 || n==0){      

      return1;    

   }else       

     returnroad(m-1, n)+road(m, n-1); 

}


0 0
原创粉丝点击