Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    182

    [c++] Algoritmo di ordinamento char

    vorrei ordinare un array di char in ordine alfabetico. Cioè: data una parola ad esempio ciao vorrei mettere in ordine cosi: acio
    Questo è il mio codice, ma non capisco cosa non va:

    codice:
    void alfasort(char x[]){
         char temp;
         
         for(int i=0; i<strlen(x);i++){
                 if(x[i]>x[i+1]){
                 temp=x[i];
                 x[i]=x[i+1];
                 x[i+1]=temp;             
                 }//if
         }//for   
    }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Non è detto che ordini tutto in una sola passata ... devi ripetere la for finché non è tutto ordinato.

    E poi devi fermare il for un carattere prima altrimenti x[i+1] va oltre ...

    codice:
    void alfasort(char x[]){
         char temp;
         int flag=1;
    
    	while(flag)
    	{
    		flag=0;
    		
    		for(int i=0; i<strlen(x)-1; i++)
    		{
    			if(x[i]>x[i+1])
    			{
    				temp=x[i];
    				x[i]=x[i+1];
    				x[i+1]=temp;
    				flag=1;
    			}//if
    		}//for
    	}
    }
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    182
    Originariamente inviato da oregon
    Non è detto che ordini tutto in una sola passata ... devi ripetere la for finché non è tutto ordinato.

    E poi devi fermare il for un carattere prima altrimenti x[i+1] va oltre ...

    codice:
    void alfasort(char x[]){
         char temp;
         int flag=1;
    
    	while(flag)
    	{
    		flag=0;
    		
    		for(int i=0; i<strlen(x)-1; i++)
    		{
    			if(x[i]>x[i+1])
    			{
    				temp=x[i];
    				x[i]=x[i+1];
    				x[i+1]=temp;
    				flag=1;
    			}//if
    		}//for
    	}
    }
    ok ora va bene!! non capisco solo perchè hai usato flag con 0 e 1 invece di usare un bool con true e false!
    comunque non sarebbe meglio inserire un ciclo for al posto del while?
    cosi mi funziona: for(int pass=0; pass<strlen(x); pass++)

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da mistergks
    ok ora va bene!! non capisco solo perchè hai usato flag con 0 e 1 invece di usare un bool con true e false!
    Praticamente non fa differenza ....

    comunque non sarebbe meglio inserire un ciclo for al posto del while?
    No ... perché quando determini che l'array è già ordinato, il while non ti fa perdere più tempo ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    E allora se proprio non vogliamo perdere tempo, siccome a ogni ciclo sicuramente il char con valore maggiore viene "trascinato" ai bordi dell' array, possiamo modificarlo così:
    codice:
    void alfasort(char x[]){
         char temp;
         int flag=1;
         int i,j=0;
    
    	while(flag)
    	{
    		flag=0;
    
    		for(i=0; i<strlen(x)-1-j; i++)
    		{
    			if(x[i]>x[i+1])
    			{
    				temp=x[i];
    				x[i]=x[i+1];
    				x[i+1]=temp;
    				flag=1;
    			}
    		}
    		j++;
    	}
    }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.