2015-05-05 4 views
-3

Я хочу реализовать функцию MATLAB, которая принимает три скалярных входа и возвращает вектор строки.Реализация функции сортировки

Наименьшим входным скаляром должен быть первый элемент, а наибольший скаляр должен быть последним элементом вектора строки. Я не могу использовать функцию sort.

Ниже моего кода, но он не работает.

function nw = new(s,m,l) 

if s >= m || m >= l 
    if s == m && m == l 
     nw = [s m l] 
    else 
     s > m && m > l 
     nw = [s m l] 
     if s == m && m>l 
      nw = [l m s]; 
     else s > m && m == l 
      nw = [l m s]; 
     end 
    end 
else s <= m || m <= l 
    if s < m && m < l 
     nw = [s m l]; 
    else s == m && m < l 
     if s < m && m == l 
      nw = [l m s] 
     else 
      if s > m && s < l 
       nw = [l m s] 
      end 
     end  
end 
end 
+2

так что 'new (3,1,4)' должен возвращать '[1 3 4]'? почему бы вам не использовать 'sort ([3 1 4])'? –

+0

Всегда полезно привести пример ваших входов, ожидаемого выхода и токового выхода. Пожалуйста. –

+0

Если вход (2,1,3), то выход будет равен (1,2,3). – Yousuf

ответ

1

Это, вероятно, не самый эффективный (быстрый) способ сделать это, но это весело играть с, что время от время.

Эта функция будет сортировать 3 номера в намного меньше инструкции:

function nw = new(s,m,l) 

v = [s m l ] ; %// group all variable in one array 

if all(v == v(1)) %// check just in case they are all the same value 
    nw = v ; 
else 
    [~,ix(1)] = min(v) ; %// assign the index of the smallest value 
    [~,ix(3)] = max(v) ; %// assign the index of the largest value 
    ix(2) = 6 - sum(ix) ; %// find the middle index by difference (because cumsum([1 2 3]) = 6) 
    nw = v(ix) ;   %// assign the output vector based on indices collected 
end 
+0

Спасибо, человек, это сработало. – Yousuf

+0

@ DumbCoder, без проблем. В следующий раз попытайтесь лучше определить пределы своей проблемы в своем исходном вопросе. Также подумайте о принятии ответа, если он решит вашу проблему (зеленая отметка под кнопками голосования). Он показывает системе, что вопрос был решен. – Hoki

+0

Я не понял «все (v == v (1)), не могли бы вы мне немного объяснить? что более важно, почему существует v (1)? – Yousuf

-1

Когда я вас правильно, вы можете использовать сортировать:

function nw = new(s,m,l) 
    nw = sort([s,m,l]); 
end 
+0

Спасибо, человек, но мне поручено не использовать функцию сортировки. Я должен решить это без функции сортировки. – Yousuf

+1

хорошо, но в следующий раз, пожалуйста, скажите, что перед запросом;) – Thomas

2

Как об этом?

function nw = new(s,m,l) 
v = [s m l]; 
nw = [min(v), median(v), max(v)]; 

Может ли кто-нибудь подумать о случае, когда это не сработает? Я не могу ...

+0

Пробовал его с помощью всех видов ввода ... не могу это винить. Быстро и просто! (и я не знал о «медианной» функции, спасибо.) – Hoki

+0

wow! очень удобно и легко понять. – Yousuf

-1
function [x,y,z]= sort3(A); 
B=size(A); 
if B(1,1)==1 
a=A(1,1); 
b=A(1,2); 
c=A(1,3); 
elseif B(1,1)==3 
C=A' 
a=C(1,1); 
b=C(1,2); 
c=C(1,3); 
end 
if a>=b && a>=c 
if b>=c 
    row = [c b a]; 
    x=row(1,1); 
    y=row(1,2); 
    z=row(1,3); 
elseif b<=c 
    row = [b c a]; 
    x=row(1,1); 
    y=row(1,2); 
    z=row(1,3); 
end 
elseif b>=a && b>=c 
if a>=c 
    row = [c a b]; 
    x=row(1,1); 
    y=row(1,2); 
    z=row(1,3); 
elseif a<=c 
    row = [a c b]; 
    x=row(1,1); 
    y=row(1,2); 
    z=row(1,3); 
end 
elseif c>=a && c>=b 
if a>=b 
    row = [b a c]; 
    x=row(1,1); 
    y=row(1,2); 
    z=row(1,3); 
elseif a<=b 
    row = [a b c]; 
    x=row(1,1); 
    y=row(1,2); 
    z=row(1,3); 
    end 
end 
+0

Вы должны объяснить вам ответ .. – BrunoDM

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