C语言之搜索插入位置(二分查找)

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。

示例 1:

输入: nums = [1,3,5,6], target = 5
输出: 2
示例 2:

输入: nums = [1,3,5,6], target = 2
输出: 1
示例 3:

输入: nums = [1,3,5,6], target = 7
输出4:

简单来讲,运用到了二分法的知识

下面是本题的动态图片演示

第一步

C语言之搜索插入位置(二分查找)_第1张图片

第二步 

C语言之搜索插入位置(二分查找)_第2张图片

第三步 

C语言之搜索插入位置(二分查找)_第3张图片

第四步 

C语言之搜索插入位置(二分查找)_第4张图片

 第五步

C语言之搜索插入位置(二分查找)_第5张图片

第六步

C语言之搜索插入位置(二分查找)_第6张图片

第七步 

C语言之搜索插入位置(二分查找)_第7张图片

本题的代码演示,运用了函数的声明与调用(传值与传址),二分查找,数组,循环语句等知识

#include
int searchInsert(int* nums, int numsSize, int target);
int main(void)
{
    int nums[4] = { 1,3,5,6 };
    int numsSize = 4;
    int target = 7;
    int a = searchInsert(nums, numsSize,target);
    printf("%d\n", a);
    return 0;
}
int searchInsert(int* nums, int numsSize, int target) {
    int left = 0, right = numsSize - 1, mid;
    if (target > nums[numsSize - 1]) return numsSize;
    else if (target < nums[0]) return 0;
    while (left <= right) {
        mid = left + (right - left) / 2;
        if (target == nums[mid]) return mid;
        else if (target > nums[mid]) left = mid + 1;
        else right = mid - 1;
    }
    return left;
}

第二次写博客,请多多支持哦 !

你可能感兴趣的:(算法,c++,c语言)