二分查找

115 阅读1分钟
                        二分查找
int searchInsert(int* nums, int numsSize, int target) //定义数组nums,numsSize(元素)
                                                           //查找target元素
{
    int left = 0, right; 
    right = numsSize - 1;  //right最后一个元素
    while(left <= right)  //判断target是否在left和right之间
    {
        int middle = left + (right - left) / 2;  //定义中间元素middle
        if(nums[middle] > target) {      //需要查找的元素在左区间
            right = middle - 1;   //right(最后一个元素),middle-1给right(重新定义最后一个元素)
        }
        else if(nums[middle] < target) {   //需要查找的元素在右区间
            left = middle + 1;     //left(最后一个元素),middle+1给left(重新定义第一个元素)
        }
        else          //找到target元素,middle == target 
            return middle;    //返回middle
    }
    return left;   //没有需要查找的元素,按顺序插入。 返回left
}
  1. 二分查找是什么:二分查找是一个可以在数组中快速的查找需要的元素。查找一个元素,每次查找都会相应的减半,直到查找出需要的元素。 时间复杂度O(log n)。但这题增加了点难度,如果查找的元素不存在数组中的时候则需要返回按顺序插入的位置。考虑插入位置ins。
  2.              成立的条件: nums[ins-1] < target <= right[ins]
    
  3. nums数组,如果查找的元素在nums数组中,返回middle。那如果查找的元素不在nums数组,我们需要按顺序的插入元素left。