• 二分查找的感悟


        今天在看v_JULY_v写的二分查找实现(Jon Bentley:90%程序员无法正确实现)一文,感悟颇深,在看文章之前自己心想二分查找不是相当的easy,但是真的在读完文章,然后和自己写的比较之后,发现我就是那90%中的一员,深深明白一个道理,看似再简单的问题,没有100%的细心和努力也不可能做好。现在就把原文中的代码展示出来,不知道是属于10%行列还是90%行列?

    代码来自:http://blog.csdn.net/v_july_v/article/details/7093204

    1. //二分查找V0.1实现版   
    2. //copyright@2011 July   
    3. //随时欢迎读者找bug,email:zhoulei0907@yahoo.cn。  
    4.   
    5. //首先要把握下面几个要点:   
    6. //right=n-1 => while(left <= right) => right=middle-1;  
    7. //right=n   => while(left <  right) => right=middle;  
    8. //middle的计算不能写在while循环外,否则无法得到更新。   
    9.   
    10. int binary_search(int array[],int n,int value)  
    11. {  
    12.     int left=0;  
    13.     int right=n-1;  
    14.     //如果这里是int right = n 的话,那么下面有两处地方需要修改,以保证一一对应:  
    15.     //1、下面循环的条件则是while(left < right)  
    16.     //2、循环内当array[middle]>value 的时候,right = mid  
    17.   
    18.     while (left<=right)          //循环条件,适时而变  
    19.     {  
    20.         int middle=left + ((right-left)>>1);  //防止溢出,移位也更高效。同时,每次循环都需要更新。  
    21.   
    22.         if (array[middle]>value)  
    23.         {  
    24.             right =middle-1;   //right赋值,适时而变  
    25.         }   
    26.         else if(array[middle]<value)  
    27.         {  
    28.             left=middle+1;  
    29.         }  
    30.         else  
    31.             return middle;    
    32.         //可能会有读者认为刚开始时就要判断相等,但毕竟数组中不相等的情况更多  
    33.         //如果每次循环都判断一下是否相等,将耗费时间  
    34.     }  
    35.     return -1;  
    36. }  
  • 相关阅读:
    re模块
    Docker的使用
    flask中请求勾子
    flask中的蓝图实现模块化的应用
    HTTP中常见的各种状态码详解及解决方案
    git快速入门
    2st week blog 1
    web个人介绍
    CentOS7下shell脚本实现限定范围类的随机数
    CentOS7下shell脚本大小比较
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3241488.html
Copyright © 2020-2023  润新知