给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。例如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
哈希查找可解决