用matlab解决问题

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。例如nums = [1,3,5,6], target = 5,应当返回3;nums = [1,3,5,6], target = 2,应当返回2。

参考代码如下:

nums = [1, 3, 5, 6]; %已知数组
target=5; %插入的数
n=length(nums); %插入的位置

for i=1:length(nums)
    if target<=nums(i)
        n = i;
        break;
    end
end
nums
target
n

array = [3 1 2  4 5 6  8 9 7];
ElementsFound = [1 3 7];
[,,index]=intersect(ElementsFound,array )

试试这段代码

这不就是二分查找吗?

function index=bisect(nums,target)
low=1;
high=length(nums);
while low<high
    mid=floor((low+high)/2);
    if nums(mid)<target
        low=mid+1;
    else
        high=mid;
    end
end
if target>nums(length(nums))
    index=length(nums)+1;
else
    index=low;
end
end

详细如下,包括注释

%函数开始
function [outputArg1,outputArg2] = InsertionSort(inputArg1,inputArg2)
%待排序矩阵,名为sortarray
sortarray=[5,3,1,-1,-7,4,9,-6,8,10,4];
%size()函数返回的是x矩阵的行数和列数,m表示行数,n表示列数
[m,n]=size(sortarray);
%插入排序,默认的第一个元素是有序的,则从第二个元素开始排序
    for i=2:n
%temp中存放的是待排序的元素
        temp=sortarray(:,i);
%j表示已排序后的数组中有多少个元素,即待排序的元素需要和j个元素去进行比较
        j=i-1;
%当排序进行到第一个元素之后,则停止排序。如果待排序元素temp的值小于已排序元素的值,则执行以下步骤
        while(j>=1 && temp<sortarray(:,j))
%将元素位置后挪一位
            sortarray(:,j+1)=sortarray(:,j)
%将指针往前挪一位
            j=j-1;
        end
%插入
        sortarray(:,j+1)=temp;
    end
end

三行代码解决,同时还考虑了目标值在第一个数的情况:

nums=[1,3,5,6];
target=5;

index=find(nums<target,1,'last');
if isempty(index),index=0;end

index=index+1

哈希查找可解决