Ordinare in modo crescete i valori di un vettore

di il
1 risposte

Ordinare in modo crescete i valori di un vettore

Dovrei oridnare in ordine crescente i valori di un vettore senza utilizzare le librerie matlab.

a=[7 1 5 2]
b=a;
for i=1:length(a)
    for j=1:length(a)
        if a(i)<b(j)
            a(i)=b(j);
        end
    end
end
Procedendo in questo modo matlab mi restituisce il vettore a=[7 7 7 7]
Per cortesia qualcuno sa dirmi dove sbaglio e come dovrei procedere per ordinare il vettore?

1 Risposte

  • Re: Ordinare in modo crescete i valori di un vettore

    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
    
Devi accedere o registrarti per scrivere nel forum
1 risposte