根据第一列对2列进行排序

时间:2013-11-30 21:06:05

标签: matlab sorting merge mergesort

假设我有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

2 个答案:

答案 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)