码迷,mamicode.com
首页 > 其他好文 > 详细

二分法查找

时间:2021-06-02 12:02:48      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:highlight   target   nbsp   rgba   时间   arch   数字   ret   search   

条件:

数组有序

每次查找都跟数组中间位置数字比较大小,如果要找的数字比中间位置的数字小,那查找就从【0,中间位置的下标前一个位置】这个范围查找;如果要找的数字比中间位置的数字大,那查找的范围就变成【中间位置下标的下一个位置,最大位置】。如果要找的数字正好等于中间位置上的数字,那就找到了;

时间复杂度:查找次数 = log2 ^N;

最好的情况一次就找到,最差的情况,数字在边边上,每次都缩小一半的范围去找target

int search(int* nums, int numsSize, int target){

     int low =0;
     int high = numsSize-1;
     int mid = (low + high)/2;
     while(low < high)
     {
        
         if(target > nums[mid])
         {
             low = mid +1;
         }
         else if(target < nums[mid])
         {
             high = mid-1;
         }
         else{
             return mid;
         }
         mid = (low + high)/2;//要记得更新,否则就死循环了
     }
     if(nums[low] == target)
     {
         return low;
     }
     return -1;
     
}

 

二分法查找

标签:highlight   target   nbsp   rgba   时间   arch   数字   ret   search   

原文地址:https://www.cnblogs.com/8335IT/p/14814795.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!