假设我有2个矩阵,
a = [2,5,3,6]
b = [9,1,8,4]
我想要做的是创建一个函数,将A从最低到最高排序,并且相应的B值保持。但是,我需要在不使用sortrows的情况下这样做。
这是我的想法。
function [ out ] = mergesort( a,b )
c = [a;b]
d = mergesort(c,:))
out = [c;b]
现在结局是我遇到麻烦的地方,因为第一个数组是排序的,但第二个数组(显然)没有。有人可以帮帮我吗?
编辑:这是我的合并排序算法。
function [ out ] = mergesort (a)
n=length(a);
if (n==1)
out=a; return
end
out=merge(mergesort(a(1,1:floor(n/2))),...
mergesort(a(1,floor(n/2)+1:n)));
end
编辑2:这是'合并'算法。
function [ out ] = merge(a,b)
lena = length(a);
lenb = length(b)
out=zeros(1,lena+lenb);
j=1;
k=1;
l=1;
while (j<=lena)&&(k<=lenb))
if (a(1,j)<b(1,k))
out(1,l) = a(1,j); j=j+1; l=l+1;
else
out(1,l) = b(1,k); k=k+1, l=l+1;
end
end
while (j<=lena)
out(1,l) = a(1,j); j=j+1; l=l+1;
end
while (k<=lenb)
out(1,l) = b(1,k); k=k+1;l=l+1;
end
end
答案 0 :(得分:3)
此解决方案不使用sortrows
c=[a;b];
[~,index]=sort(c(1,:));
out=c(:,index);
答案 1 :(得分:2)
[asorted,order]=sort(a);
correspondingValuesOfb=b(order)
对变量order
进行排序,将重新排序完成到a。从技术上讲,asorted==a(order)
。