Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2007
    Messaggi
    42

    Bubblesort per ordinare elementi della classe ArrayList

    Ciao a tutti!
    Il noto algoritmo bubblesort può anche essere usato per ordinare in ordine alfabetico delle stringhe.
    IL seguente file che ho scritto funziona perfettamente:
    codice:
    public class parole {
    public static void main (String[]args){
    	String [] num = new String [3];
    	num[0]= "c";
    	num[1]= "a";
    	num[2]= "b";
    	System.out.println("Si parte da: " + num[0]+" "+num[1]+" "+num[2]+" ");
    	int n = num.length;
    	int i=0;
    	int j = 0;
    	String tmp = "";
    	for(i=0;i<n-1;i++){
    		for(j=0;j<n-i-1;j++){
    			if(num[j].compareTo(num[j+1]) > 0 ){
    				tmp = num[j];
    				num[j] = num[j+1];
    				num[j+1]=tmp;
    			}
    		}
    	}
    System.out.println(num[0]+" "+num[1]+" "+num[2]+" ");
    }
    }
    Questo per gli array.
    Per i vettori dobbiamo usare la classe ArrayList,ed è qui che ho dei problemi.
    Non riesco a capire perchè l'algoritmo,nonostante sia corretto non funzioni:
    codice:
    //Metodo che stampa tutte le info di tutti gli elementi della lista (vincolo:in ordine alfabetico)
    public void informazioni(){
    	int i = 0;
    	int j = 0;
    	for (i = 0;i < contatti.size()-1;i++){
    		for (j=0;j<contatti.size()-i-1;j++){
    		Persona contatto = contatti.get(i);
    		if ( contatti.get(j).getNome().compareTo(contatti.get(j+1).getNome()) > 0 ){
    			contatto = contatti.get(j);
    			contatti.set(j, contatti.get(j+1));
    			contatti.set(j+1, contatto);		
    			}
    		}
    	}	
    }
    Anche se è un po' fastidioso da leggere,la condizione verifica che il nome di un contatto sia "maggiore" (intendo per ordine alfabetico) al successivo.
    Secondo me,il problema risiede nella variabile "contatto" che viene sovrascritta!
    Se è cosi come ovviare a questo problema?

    GRazie in anticipo

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2007
    Messaggi
    42
    Assurdo! Questo forum mi ispira!
    HO risolto pure questa volta dopo mezzo minuto dal post!
    Posto il codice "presumibilmente" corretto(che però ho testato e funziona)
    codice:
    //Metodo che stampa tutte le info di tutti gli elementi della lista (vincolo:in ordine alfabetico)
    public void informazioni(){
    	int i = 0;
    	int j = 0;
    	int k = 0;
    	Persona contatto = contatti.get(i);
    	for (i = 0;i < contatti.size()-1;i++){
    		for (j=0;j<contatti.size()-i-1;j++){
    		if ( contatti.get(j).getNome().compareTo(contatti.get(j+1).getNome()) > 0 ){
    			contatto = contatti.get(j);
    			contatti.set(j, contatti.get(j+1));
    			contatti.set(j+1, contatto);		
    			}
    		}
    	}
    	for (k=0;k < contatti.size();k++){
    		System.out.println(contatti.get(k).getInfo());
    	}
    }
    Ora la variabile contatto non viene più sovrascritta,e in più ho aggiunto un ciclo che nel file di test mi stampa a video tutti i risultati!

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Ma usare il metodo sort() della classe java.util.Collections ... no?? Chiaramente dovresti poi implementare o Comparable o Comparator.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2007
    Messaggi
    42
    Originariamente inviato da andbin
    Ma usare il metodo sort() della classe java.util.Collections ... no?? Chiaramente dovresti poi implementare o Comparable o Comparator.
    No perchè ho conoscenze limitate (secondo me troppo limitate).
    E a questo limite si aggiunge il fatto che è consentito usare SOLO e dico SOLO,cose trattate durante il cdl.

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da onepiece007
    No perchè ho conoscenze limitate (secondo me troppo limitate).
    E a questo limite si aggiunge il fatto che è consentito usare SOLO e dico SOLO,cose trattate durante il cdl.
    Se le cose stanno così, allora ok.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    solo una precisazione se mi posso permettere:

    in realtà quello che hai implementato non è il vero e proprio bubble sort!

    Molti chiamano algoritmi implementati come il tuo come bubble sort ma in realtà sono simili a bubble sort ma non identici:

    il vero bubble sort nel secondo for parte con j=contatti.size-1 torna indietro finchè j>i decrementando j con (j--) !

    ovviamente però il tuo algoritmo funziona sicuramente correttamente.

    Dico questo perchè in un esame all'università ho implementato bubble sort come te e mi han tolto parecchi punti!!!

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2007
    Messaggi
    42
    Originariamente inviato da mestablesta
    solo una precisazione se mi posso permettere:

    in realtà quello che hai implementato non è il vero e proprio bubble sort!

    Molti chiamano algoritmi implementati come il tuo come bubble sort ma in realtà sono simili a bubble sort ma non identici:

    il vero bubble sort nel secondo for parte con j=contatti.size-1 torna indietro finchè j>i decrementando j con (j--) !

    ovviamente però il tuo algoritmo funziona sicuramente correttamente.

    Dico questo perchè in un esame all'università ho implementato bubble sort come te e mi han tolto parecchi punti!!!
    Bè allora hai fatto bene a dirmelo.In effetti il vero bubblesort usa il while e non 2 for.
    Però mi è capitato di andare qua http://www.cs.oswego.edu/~mohammad/c...t/Sort2-E.html

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da onepiece007
    Bè allora hai fatto bene a dirmelo.In effetti il vero bubblesort usa il while e non 2 for.
    No, non è una questione di while o for! Ma di come devono essere i "range" dei due indici ed anche di come deve essere il test e lo swap tra due elementi.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.