Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di jspippo
    Registrato dal
    Jul 2005
    Messaggi
    358

    [java] Ordinare un array

    Salve a tutti,

    Ho una domanda da farvi prima che ci sbatta un po la testa:

    dopo aver inserito dei dati string in un array, è possibile mettrli in ordine alfabetico?

    avete già affrontato qeusto problema?

    grazie

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,162
    Forse questa classe ti può essere utile: java.util.Arrays.
    codice:
    String [] mioVettore = ...
    Arrays.sort( mioVettore );
    for (int i=0; i<mioVettore.length; i++)
       System.out.println( mioVettore[i] );
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    Arrays.sort(array, 0, array.length);
    con array di String o oggetti che implementano Comparable funziona alla grande

  4. #4
    Utente di HTML.it L'avatar di jspippo
    Registrato dal
    Jul 2005
    Messaggi
    358
    Grazie, lo proverò subito.

    Ma, una curiosità:

    logicamente per ordinare un array utilizzando cicli for e istruzione if o altro come fareste? come partireste?

  5. #5
    Originariamente inviato da jspippo
    Grazie, lo proverò subito.

    Ma, una curiosità:

    logicamente per ordinare un array utilizzando cicli for e istruzione if o altro come fareste? come partireste?
    l'ordinamento è un argomento decisamente vasto in informatica.
    Ci sono gli algoritmi ricorsivi e iterativi, tra questi quelli che hanno una complessità maggiore e minore, quelli che usano più o meno memoria e spazio aggiuntivo.
    Uno dei più semplici potrebbe essere questo(in Java):

    codice:
     	public static void Insertion_sort(int[] A)
    	{
    		int k,j;
    		for(int i=1;i<A.length;i++)
    		{
    			k=A[i];
    			j=i-1;
    			while((j>=0)&&(A[j]>k))
    			{
    				A[j+1]=A[j];
    				j--;
    			}
    			A[j+1]=k;
    		}
    	}
    che è chiamato appunto Insertion Sort.
    Ha una complessità abbastanza alta su array grandi, ma decisamente buona su array di piccole dimensioni

    Se ne vuoi altri fammi sapere.

  6. #6
    Utente di HTML.it L'avatar di jspippo
    Registrato dal
    Jul 2005
    Messaggi
    358
    Grazie, io invece stavo pensando di utilizzare 2 array, uno con i dati, l'altro per inserire i dati in un'altro ordine.

    Mi faresti qualche altro esempio?

    Si portrebbe utilizzare una mappa, non so se chiama cosi, l'ho letta da qualche parte ma non ho approfondito, ha a che fare con l'hashcode o qualcosa di simile...

  7. #7
    Originariamente inviato da jspippo
    Grazie, io invece stavo pensando di utilizzare 2 array, uno con i dati, l'altro per inserire i dati in un'altro ordine.

    Mi faresti qualche altro esempio?

    Si portrebbe utilizzare una mappa, non so se chiama cosi, l'ho letta da qualche parte ma non ho approfondito, ha a che fare con l'hashcode o qualcosa di simile...
    Usando 2 array non hai un ordinamento molto ottimizzato comunque ti scrivo un algoritmo che ha complessità ottima(per complessità intendo le operazioni che vengono eseguite dal programma):


    codice:
    class Merge
    {
    static int[] B;
    public static void Merge_Sort_Init(int[] A,int p,int r)
    	{
    		B=new int[A.length];
    		Merge_Sort(A,p,r);
    	}
    	public static void Merge_Sort(int[] A,int p,int r)
    	{
    		if(p<r)
    		{
    			int q=(int)((p+r)/2);
    			Merge_Sort(A,p,q);
    			Merge_Sort(A,q+1,r);
    			Merge(A,p,q,r);
    		}
    	}
    	public static void Merge(int[] A,int p,int q,int r)
    	{
    		int i=p,j=q+1,k=p;
    		while((i<=q)&&(j<=r))
    		{
    			if(A[i]<A[j]) B[k++]=A[i++];
    			else B[k++]=A[j++];
    		}
    		while(i<=q)
    			B[k++]=A[i++];
    		while(j<=r)
    			B[k++]=A[j++];
    		Copia(A,B,p,r);
    	}
    }
    Non so se è quello che ti interessa(fa le stesse cose di quello di prima ma utilizza due array A e B).

  8. #8
    Utente di HTML.it L'avatar di jspippo
    Registrato dal
    Jul 2005
    Messaggi
    358
    ok, grazie mille

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 © 2020 vBulletin Solutions, Inc. All rights reserved.