Il modo migliore (e quasi l'unico) per scoprire dove sia l'errore in un codice, è eseguirlo in modalità debug
(https://it.mathworks.com/help/matlab/matlab_prog/debugging-process-and-features.html)
Per come hai impostato i due cicli for nel tuo codice assegni sempre ad "a" il valore maggiore.
Per implementare l'algoritmo che hai scelto, devi confrontare il primo elemento con il secondo (quindi il secondo loop deve partire dall'indice del primo), poi con il secondo ecc.
Poi, devi confrontare il secondo con il terzo, poi con il quarto ecc. fino al penultimo che (quindi il primo loop deve terminare a "length(a)-1)" che andrà confrontato con l'ultimo.
Quando opportuno (quando la condizione dell'"if" viene verificate) devi scambiare di posizione i due elementi con l'aiuto di una variabile temporanea (per non perdere uno dei due valori nello scambio).
In pratica:
clear all
close all
% Creazione di un vettore di esempio
x=randi(10,1,5);
% Creazione dei vettori di output (per conservare una copia del vettore originale)
x_crescente=x;
x_decrescente=x;
% Determinazione del numero di elementi del vettore
n_el=length(x);
% Loop per l'ordinamento crescente
for i =1:n_el-1
for j=i+1:n_el
if(x_crescente(i) >= x_crescente(j))
tmp=x_crescente(i);
x_crescente(i)=x_crescente(j);
x_crescente(j)=tmp;
end
end
end
% Loop per l'ordinamento decrescente
for i =1:n_el-1
for j=i+1:n_el
if(x_decrescente(i) <= x_decrescente(j))
tmp=x_decrescente(i);
x_decrescente(i)=x_decrescente(j);
x_decrescente(j)=tmp;
end
end
end
x
x_crescente
x_decrescente