Imperfezione selection sort

di il
5 risposte

Imperfezione selection sort

Ciao ragazzi, il professore ci ha spiegato un tipo di programma con cicli annidati, chiamato "selection sort" che, nelle sue dispense, ha detto si imposta così:
for (int i =0; i <9; i ++) {
// cerca il minimo nelle posizioni tra i e 10...
int posmin =i; // ... portandosi dietro l’indice
for (int j=i ; j <10; j ++) {
if ( valori [j]< valori [ posmin ])
posmin = j;
}
// scambia il minimo con l’elemento in posizione i
int tmp = valori [i ];
valori [ i] = valori [ posmin ];
valori [ posmin ] = tmp ;
}
L'esercizio che io ho da fare sembrerebbe semplice: consiste nel fare la medesima cosa con stringhe anzichè con numeri. Il punto è che con questo codice praticamente (credo) identico:
import java.util. Scanner;
public class StringSelectionsort {

	public static void main(String[] args) {
		String [] parole= new String [5];
		Scanner input=new Scanner(System.in);
		System.out.println("Inserisci cinque parole");
		for (int i=0; i<5; i++) {
			parole [i]= input.next();
			
		}
		System.out.println ("Le parole in ordine alfabetico");
		for (int i=0; i<4; i++) {
			int posmin=i;
			for (int j=i; j<5; j++) {
				if (parole[j].compareTo(parole [i])<0);
				posmin=j;
			}
			String tmp= parole [i];
			parole [i]= parole [posmin];
			parole [posmin]= tmp;
			System.out.println(tmp);
		}
		// TODO Auto-generated method stub

	}

}
Mi ordina lessicograficamente tutte le parole, tranne l'ultima (la quinta che inserisco). Ho provato cambiando il valore degli indici, ma, o va in errore oppure ripete due volte una stessa parola. Sapete dirmi dove sta l'errore? Vi ringrazio, in anticipo.

5 Risposte

  • Re: Imperfezione selection sort

    Non ho letto tutto il codice, ma un errore l'ho visto subito:
    
    for (int j=i; j<5; j++) {
       if (parole[j].compareTo(parole [i])<0);   // <-- Il punto e virgola QUI!!
       posmin=j;
    }
    
    Ciao.
  • Re: Imperfezione selection sort

    Grazie, si effettivamente non c'entrava nulla il punto e virgola messo lì, ma il problema rimane: mi ristampa tutte le parole inserite tranne l'ultima.
  • Re: Imperfezione selection sort

    ytreka ha scritto:


    Grazie, si effettivamente non c'entrava nulla il punto e virgola messo lì, ma il problema rimane: mi ristampa tutte le parole inserite tranne l'ultima.
    		for (int i=0; i<4; i++) {
    			[...]
    			System.out.println(tmp);
    		}

    Glielo stai ordinando tu di non stampare il quinto...
  • Re: Imperfezione selection sort

    Sì è vero, il punto è che se modifico a i<5, il programma mi restituisce cinque stringhe sì, ma due di esse sono uguali. D'altronde, non so come fargli stampare cinque stringhe dopo avergliele fatte confrontare correttamente. In programmi simili ho usato una variabile booleana per poter stampare al di fuori del ciclo, ma non mi sembra questo il caso.
  • Re: Imperfezione selection sort

    Ho risolto così:
    import java.util. Scanner;
    public class StringSelectionsort {
    
    	public static void main(String[] args) {
    		String [] parole= new String [5];
    		Scanner input=new Scanner(System.in);
    		System.out.println("Inserisci cinque parole");
    		for (int i=0; i<5; i++) {
    			parole [i]= input.next();
    			
    		}
    		System.out.println ("Le parole in ordine alfabetico");
    		for (int i=0; i<5; i++) {
    			for (int j=i; j<5; j++) {
    				if (parole[j].compareTo(parole[i])<0) {
    				String tmp= parole[i];
    				parole [i]= parole [j];
    				parole [j]= tmp;
    			}
    		}
    			
        }
    		for (int i=0; i<5; i++) {
    		System.out.println(parole [i]);
    	}
      }
    }
    
Devi accedere o registrarti per scrivere nel forum
5 risposte