• 二分查找


    Jon Bentley:90%以上的程序员无法正确无误的写出二分查找代码。也许很多人都早已听说过这句话,但我还是想引用《编程珠玑》上的如下几段文字: 

    二分查找可以解决(预排序数组的查找)问题:只要数组中包含T(即要查找的值),那么通过不断缩小包含T的范围,最终就可以找到它。一开始,范围覆盖整个数组。将数组的中间项与T进行比较,可以排除一半元素,范围缩小一半。就这样反复比较,反复缩小范围,最终就会在数组中找到T,或者确定原以为T所在的范围实际为空。对于包含N个元素的表,整个查找过程大约要经过log(2)N次比较。

    //首先要把握下面几个要点:  
    //right=n-1 => while(left <= right) => right=middle-1;  
    //right=n   => while(left <  right) => right=middle;  
    //middle的计算不能写在while循环外,否则无法得到更新。  
      
    int binary_search(int array[],int n,int value)  
    {  
        int left=0;  
        int right=n-1;  
        //如果这里是int right = n 的话,那么下面有两处地方需要修改,以保证一一对应:  
        //1、下面循环的条件则是while(left < right)  
        //2、循环内当array[middle]>value 的时候,right = mid  
      
        while (left<=right)          //循环条件,适时而变  
        {  
            int middle=left + ((right-left)>>1);  //防止溢出,移位也更高效。同时,每次循环都需要更新。  
      
            if (array[middle]>value)  
            {  
                right =middle-1;   //right赋值,适时而变  
            }   
            else if(array[middle]<value)  
            {  
                left=middle+1;  
            }  
            else  
                return middle;    
            //可能会有读者认为刚开始时就要判断相等,但毕竟数组中不相等的情况更多  
            //如果每次循环都判断一下是否相等,将耗费时间  
        }  
        return -1;  
    }  
    
  • 相关阅读:
    docer run 、docker attach 与 docker exec的区别
    filebeat-kafka:WARN producer/broker/0 maximum request accumulated, waiting for space
    json 格式要求
    词法分析
    CSS3 鲜为人知的属性-webkit-tap-highlight-color的理解
    DOMContentLoaded与load的区别
    用vue的自定义组件写了一个拖拽 组件,局部的 只能在自定义元素内的
    浮动元素遇到标准流元素 会发生转角遇到爱
    柯里化函数
    转载一篇关于toString和valueOf
  • 原文地址:https://www.cnblogs.com/richardcpp/p/2722884.html
Copyright © 2020-2023  润新知