MATLAB: Writing a function that merges two sorted vectors

functionhelpMATLABsortvectorvectors

Hello, I need to write a function that merge two sorted vectors to one sorted vector that containes all the values.
My code is:
vec1= input('enter vec1\n');
vec2= input('enter vec2\n');
vec1=sort(vec1)
vec2=sort(vec2)
function [res]=merge(vec1, vec2)
n1=length(vec1);
n2=length(vec2);
n=n1+n2;
res=zeros(n, 1);
if n1==0
res=vec2;
elseif n2==0
res=vec1; else
i1=1;
i2=1;
end
for j=1:n
if i1>n1
res(j)=vec2(i2);
i2=i2+1;
elseif i2>n2 res(j)=vec(i1); i1=i1+1;
elseif vec(i1)<vec(i2)
res(j)=vec(i1);
i1=i1+1;
else
res(j)=vec2(i2);
i2=i2+1;
end
end
end
My questions are: Is my code right and how can I call the new function that I created? (I saved the file named 'merge' in a function file).

Best Answer

If you simply want to join two sorted vectors you can use

new_vec = [vec1 vec2];

but this seems improbable to me since joining two sorted vectors like this may not be very useful. The second possibility is, you also want to sort the result, you can do that as

new_vec = sort([vec1 vec2]);

In this second case, you don't even need to run

vec1=sort(vec1)
vec2=sort(vec2)

because the command I mentioned will sort both of them together.

In either case, no need to write your own merge function. You can use MATLAB builtin function to reach same results.

Related Question