二分查找 递归查找 非递归查找【详解】

二分查找  普通查找 和递归
查找关键字符:二分(折半)查找法  (缩小区域)
     前题:查找序列是有序(降/升序)  
     假定:升序
      1、每次取序列中间元素进行比较
      2、如果key>mid,说明查找值在中间元素的右侧,
         如果key<mid,说明查找值在中间元素的左侧,
         key==mid,说明查找成功
      3、如果查找不成功,则再重复1,2步骤,直到查找成功或失败
      
我们以9为例子      
      
比如:1,2,3,4,5,6,7,8,9,10
             L                    mid                              r                             第一次  
                                             L        M              R                           第二次
                                                         L   M      R                            第三次
                        
                        
代码程序
*************************************************************
#include<stdio.h>
void main()
{

    int buf[10]={1,2,3,4,5,6,7,8,9,10};
    int    left=0,right=10;
    int    mid;
    int key=9;
    while(left<=right)
    {
        mid=(left+right)/2;
        if(key<buf[mid])
        {
            right=mid-1;
            printf("在左侧\n");
        }    
        if(key>buf[mid])
        {
            left=mid+1;
            printf("在右侧\n");
        }
        else if(key==buf[mid])
        {
            printf("成功找出%d\n",mid+1);
            break;
        }    
    
    
    }

}
************************************************************************
--------------------------------------------------------------------------------
递归:就是自己调用自己,每次都是调用这个函数实现二分查找
int fun(int key,int buf[],int left,int right)
{
    int mid;
    mid=(left+right)/2;
    if(key<buf[mid])
        {
            return fun(key,buf,mid-1,left);
            printf("在左侧\n");
        }    
        if(key>buf[mid])
        {
            return fun(key,buf,right,mid+1);
            printf("在右侧\n");
        }
        else if(key==buf[mid])
        {
            printf("成功找出%d\n",mid+1);
            
        }    
        else
        return -1;
}
----------------------------------------------------------------------------------        
    

猜你喜欢

转载自blog.csdn.net/weixin_40989362/article/details/81121662