2013-11-30 4 views
1

Допустим, у меня есть 2 матрицы,Сортировка 2 колонки, основанные на первом

То, что я хочу сделать, это создать функцию, которая сортирует от низшего к высшему, и соответствующие значения трюме B. Однако мне нужно сделать это, не используя сортировки.

Вот моя идея на данный момент.

function [ out ] = mergesort(a,b) 
c = [a;b] 
d = mergesort(c,:)) 
out = [c;b] 

Теперь концовка, где у меня есть немного проблем, так как первый массив отсортирован, но второй (очевидно) нет. Кто-нибудь может мне помочь?

EDIT: Вот мой алгоритм сортировки слияния.

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 

EDIT 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

Ваш код синтаксически некорректен и что такое 'mergesort'? Вы создали функцию? – Daniel

ответ

3

Это решение не использует sortrows

c=[a;b]; 
[~,index]=sort(c(1,:)); 
out=c(:,index); 
+0

Есть ли способ сделать это без сортировки? Поскольку у меня есть функция, называемая mergesort, которая сортирует два, мне просто нужно выровнять вторую строку в соответствии. – user3052576

+0

Измените свой 'mergesort' и добавьте индексный параметр, похожий на встроенный' sort' – Daniel

+0

Любые подсказки о том, как этого достичь? Я предполагаю, что мое входное значение должно быть 2 переменными длинными, но я ошеломлен тем, как изменить сортировку для размещения дополнительной матрицы. – user3052576

2
[asorted,order]=sort(a); 
correspondingValuesOfb=b(order) 

Сортировать помещает в переменную order переупорядочения НАНЕСЁННЫЙ. Технически, asorted==a(order).

Смежные вопросы