Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente bannato
    Registrato dal
    Sep 2012
    Messaggi
    465

    Usare sort con un comparatore

    Vorrei ordinare un vettore con sort() ma all'incontrario però non voglio creare un algoritmo per capovolgere il vettore perché lo scopo e sprecare meno risorse possibili. Pensavo di usare i comparatori e ho provato in mille maniere diverse ma non sono riuscito nell'intento. Secondo voi dove sbaglio?

    codice:
    class qwertyuiop implements Comparator<Integer>{
    	public int compare(Integer a1, Integer b1){
    		Integer a2;
    		Integer b2;
    		a2=a1;
    		b2=b1;
    		// Inverte il confronto
    		return b2.compareTo(a2);
    	}
    	
    }
    
    ...
    
    Arrays.sort(vet, new qwertyuiop());
    
    ...

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente bannato
    Registrato dal
    Sep 2012
    Messaggi
    465
    codice:
    Comparator<Integer> r = Array.reverseOrder();
    Arrays.sort(vet,r);
    anche questo non funziona...

  4. #4
    Utente bannato
    Registrato dal
    Sep 2012
    Messaggi
    465
    Originariamente inviato da oregon
    http://www.kodejava.org/examples/270.html
    io però ho un semplice array non un Integer vet, come posso fare?


  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Cioè ? Spiegati ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente bannato
    Registrato dal
    Sep 2012
    Messaggi
    465
    Originariamente inviato da oregon
    Cioè ? Spiegati ...
    vet è un int non un Integer!

    se scrivo

    public static void mergeSortModificato(Integer vet[])

    non mi da errore ma il programma va in tilt perché vet é:

    int vet[]

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    vet è un int ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613

    Re: Usare sort con un comparatore

    Originariamente inviato da peruzzo
    Vorrei ordinare un vettore con sort() ma all'incontrario però non voglio creare un algoritmo per capovolgere il vettore perché lo scopo e sprecare meno risorse possibili. Pensavo di usare i comparatori e ho provato in mille maniere diverse ma non sono riuscito nell'intento. Secondo voi dove sbaglio?

    codice:
    class qwertyuiop implements Comparator<Integer>{
    	public int compare(Integer a1, Integer b1){
    		Integer a2;
    		Integer b2;
    		a2=a1;
    		b2=b1;
    		// Inverte il confronto
    		return b2.compareTo(a2);
    	}
    	
    }
    
    ...
    
    Arrays.sort(vet, new qwertyuiop());
    
    ...
    Le tue intenzioni mi sembrano contradditorie, in questo caso "non voglio farlo io" e "voglio che sia efficiente" cozzano un po' per come è fatto il linguaggio: vuoi farlo in maniera efficiente, vuoi farlo "alla Java", cerchi un compromesso o che altro?

  9. #9
    Utente bannato
    Registrato dal
    Sep 2012
    Messaggi
    465
    Credevo di essere stato chiaro ma provo a rispiegarmi. Sto facendo un programma di facilità estrema (per voi ovviamente). Ho un vettore di questo tipo:

    int a[] = new int[n];

    e non di questo:

    Integer A[] = new Integer[n];

    che vorrei ordinare con il metodo Array.sort(a);

    Il metodo che mi avete consigliato:

    Comparator<Integer> r = Array.reverseOrder();
    Arrays.sort(a,r);

    Funziona solo con A e non con a! La mia domanda è questa:

    Devo riscrivere tutto il mio programma usando A e Array.reverseOrder(); al posto di a oppure posso creare un ciclo for che inverte a ordinato con sort()?

    Esiste un altro sistema per ordinare in ordine decrescente il vettore a usando sort() più un comparatore oppure sono costretto a riscrivere tutto il mio programma usando A?

    Il mio obiettivo è individuare il metodo più veloce per avere gli elementi del mio vettore in ordine decrescente. Pensavo ad un comparatore perché applicare sort() più un ciclo for faccio crescere i tempi di calcolo e se non ho capito male (chiedo conferma), il comparatore fa si che qualsiasi sia l'ordine scelto (crescente o decrescente) il tempo di calcolo resta costante.

    Questa volta spero di essere stato sufficientemente chiaro.

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613
    Originariamente inviato da peruzzo
    Credevo di essere stato chiaro ma provo a rispiegarmi. Sto facendo un programma di facilità estrema (per voi ovviamente). Ho un vettore di questo tipo:

    int a[] = new int[n];

    e non di questo:

    Integer A[] = new Integer[n];

    che vorrei ordinare con il metodo Array.sort(a);

    Il metodo che mi avete consigliato:

    Comparator<Integer> r = Array.reverseOrder();
    Arrays.sort(a,r);

    Funziona solo con A e non con a! La mia domanda è questa:

    Devo riscrivere tutto il mio programma usando A e Array.reverseOrder(); al posto di a oppure posso creare un ciclo for che inverte a ordinato con sort()?

    Esiste un altro sistema per ordinare in ordine decrescente il vettore a usando sort() più un comparatore oppure sono costretto a riscrivere tutto il mio programma usando A?

    Il mio obiettivo è individuare il metodo più veloce per avere gli elementi del mio vettore in ordine decrescente. Pensavo ad un comparatore perché applicare sort() più un ciclo for faccio crescere i tempi di calcolo e se non ho capito male (chiedo conferma), il comparatore fa si che qualsiasi sia l'ordine scelto (crescente o decrescente) il tempo di calcolo resta costante.

    Questa volta spero di essere stato sufficientemente chiaro.
    Guarda che avevo capito la tua situazione, ma come ho scritto quello che non capivo erano le tue intenzioni, se miravi all'efficienza o alla semplicità; utilizzare Comparator e facilitazioni simili non credo sia il modo più efficiente poiché queste cose spesso lavorano su oggetti Collection (mentre tu hai un array) ed utilizzando i generici lavorano su oggetti (e non su tipi primitivi, come nel tuo caso, causando boxing/unboxing), quindi bisognerebbe fare diverse conversioni anche "costose", e soprattutto utilizzare un Comparator non è certamente più veloce di un "x < y" dove x e y sono due int...

    Penso che il metodo più semplice (e anche abbastanza efficiente) sia proprio il primo cosa che hai descritto (e scartato): ordinare l'array con Arrays.sort e "rigirarlo" manualmente con un ciclo di 4 righe.

    Poi per carità, se vuoi farlo con i Comparator "per sfizio", si può fare.
    E allo stesso modo, si può anche cercare di ottimizzare la fase di ordinamento, tanto più quante sono le assunzioni fattibili sul tuo array di interi. Ma prima valuta se davvero ti è utile.

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.