[Do-While] Ordinamento ottimizzato

di il
6 risposte

[Do-While] Ordinamento ottimizzato

Ciao a tutti stavo ragionando su questo codice che consente di ordinare, in maniera ottimizzata, dei valori numerici all'interno di un array:
#include<stdio.h>
int main ()
{
int k, i, p, vet [4] = {4,3,2,1}, n, temp;
n=4;
p=n
do {
k=0;
for (i=0;i<n-1;i++){
if(vet>vet[i+1]){
temp = vet;
vet = vet[i + 1];
vet[i + 1] = temp;
k = 1;
}
}
n=p;
p=i + 1;
}

while (k==1 && n>1);
for(i=0;i<n;i++){
printf("%d\n", vet);
}
}

Sicneramente non m'è molto chiara la parte in grassetto, soprattutto l'utilizzo delle variabili p,n, k e temp mi potreste spiegare a parole il loro funzionamento? Questo programma ordina dal più piccolo al più grande, se volessi farne uno dal più grande al più piccolo?
Grazie in anticipo

6 Risposte

  • Re: [Do-While] Ordinamento ottimizzato

    Https://it.wikipedia.org/wiki/Bubble_sor

    E per capire bene il funzionamento dei cicli ti consiglio di utilizzare il debugger e visualizzare il tutto passo dopo passo.
  • Re: [Do-While] Ordinamento ottimizzato

    Stesse raccomandazioni date ad @olegfresi su questo stesso forum ...

    Se non sai usare il debugger, "esegui" il programma su carta e controlla il valore di ogni variabile. Così capirai.

    Per l'ultima domanda, cerca di comprendere cosa vuol dire

    if(vet>vet[i+1]){

    e perché è scritto in quel modo e capirai come fare.
  • Re: [Do-While] Ordinamento ottimizzato

    oregon ha scritto:


    Stesse raccomandazioni date ad @olegfresi su questo stesso forum ...

    Se non sai usare il debugger, "esegui" il programma su carta e controlla il valore di ogni variabile. Così capirai.

    Per l'ultima domanda, cerca di comprendere cosa vuol dire

    if(vet>vet[i+1]){

    e perché è scritto in quel modo e capirai come fare.


    sta comparando il valore dell'arra alla posizione i con quello delle posizione i+1 no?
    i miei problemi a dire la verità sono nelle variabili p e n che (almeno mi sembra) gestiscono i cicli. Le parti che mi restano oscure sono solo:
    p=n;

    n=p;
    p=p+1;
    e perché si trovano rispettivamente la prima all'esterno del do-while e le ultime due all'esterno del for
    Mi potreste dire intanto qualcosa al riguardo? Io nel frattempo leggo wikipedia
  • Re: [Do-While] Ordinamento ottimizzato

    P non serve ... in realtà potrebbe essere
    
    		n = 4;
    		do {
    			k = 0;
    			for (i = 0; i<n - 1; i++) {
    				if (vet[i]>vet[i + 1]) {
    					temp = vet[i];
    					vet[i] = vet[i + 1];
    					vet[i + 1] = temp;
    					k = 1;
    				}
    			}
    		} while (k == 1);
    
  • Re: [Do-While] Ordinamento ottimizzato

    oregon ha scritto:


    P non serve ... in realtà potrebbe essere
    
    		n = 4;
    		do {
    			k = 0;
    			for (i = 0; i<n - 1; i++) {
    				if (vet[i]>vet[i + 1]) {
    					temp = vet[i];
    					vet[i] = vet[i + 1];
    					vet[i + 1] = temp;
    					k = 1;
    				}
    			}
    		} while (k == 1);
    
    Grazie, quindi in questo codice che ho trovato p cosa mi rappresenta? Perché in realtà funzionava ugualmente
  • Re: [Do-While] Ordinamento ottimizzato

    Nulla ... secondo me è un errore o parte di altro codice
Devi accedere o registrarti per scrivere nel forum
6 risposte