Ordinare array in ordine crescente java

di il
7 risposte

Ordinare array in ordine crescente java

Buonasera a tutti e grazie in anticipo per i consigli.
Sono un ragazzo appassionato di programmazione e sto cercando in questo periodo di quarantena di imparare qualcosa.
Volevo chiedervi perchè questo programma non funziona.
é un ora ormai che sono bloccato.
Conosco la bubblesort come algoritmo per risolverlo ma volevo capire perchè il mio non funziona.

Grazie a tutti e buona serata
package impariamoes;

public class Esercizio10 {
public static void main (String[] args) {
//ordinare un array tramite un metodo.

int[] array=new int[] {5,7,3,4,12,2,89,34,11};
int risultato=ordinaArray(array);
System.out.println("risulato"+ risultato);
}
public static int ordinaArray(int[]array) {

int ordina=0;
for(int i=0;i<array.length-1;i++) {

if (array>array[i+1])
ordina=array[i+1];


}

return ordina;
}

7 Risposte

  • Re: Ordinare array in ordine crescente java

    Usa i tag Code, tasto < / > , altrimenti il codice non è leggibile.

    Come fai a fare un ordinamento qualsiasi senza scambi di posto?
    Per scambiare di posto X e Y:
    temp = X;
    X = Y;
    Y = temp;
  • Re: Ordinare array in ordine crescente java

    railey ha scritto:


    volevo capire perchè il mio non funziona.
    public static int  ordinaArray(int[]array) {
    	int ordina=0;
    	for(int i=0;i<array.length-1;i++) {
    		
    		if (array[i]>array[i+1]) 
    			ordina=array[i+1];
    		
    			
    	}
    	
    	return ordina;
    }
    Questo non ordina alcunché, non è un algoritmo di ordinamento. Con un solo ciclo e oltretutto senza fare "scambi" tra gli elementi non potresti ordinare proprio nulla.
    Cosa fa .... non ha senso/utilità ...
  • Re: Ordinare array in ordine crescente java

    andbin ha scritto:


    railey ha scritto:


    volevo capire perchè il mio non funziona.
    public static int  ordinaArray(int[]array) {
    	int ordina=0;
    	for(int i=0;i<array.length-1;i++) {
    		
    		if (array[i]>array[i+1]) 
    			ordina=array[i+1];
    		
    			
    	}
    	
    	return ordina;
    }
    Questo non ordina alcunché, non è un algoritmo di ordinamento. Con un solo ciclo e oltretutto senza fare "scambi" tra gli elementi non potresti ordinare proprio nulla.
    Cosa fa .... non ha senso/utilità ...
    Buonasera,ok per i tag scusatemi.
    Dalla sua risposta ho capito che dovrei utilizzare un ulteriore ciclo credo.
    Quello che non capisco è nella mia testa era se array(quindi se il numero presente in quell'indice è> di array di i +1 assegnalo alla variabile ordina. Almeno fin qui è corretto no?
    Poi ci dovrebbe essere se non è cosi assegnalo alla variabile ordina1 ad esempio.
    Come algoritmo dovrebbe avere un senso?

    Comunque ho letto che ci sono proprio algoritmi di ordinamento,ma non me ne faccio nulla di un lavoro già fatto se non capisco io come farne uno livello " base "e sbagliare per imparare.
    Vi prego di avere pazienza con me hahah. Grazie ancora
  • Re: Ordinare array in ordine crescente java

    railey ha scritto:


    Dalla sua risposta ho capito che dovrei utilizzare un ulteriore ciclo credo.
    Con uno solo non si fa nulla ....

    railey ha scritto:


    Quello che non capisco è nella mia testa era se array[i](quindi se il numero presente in quell'indice è> di array di i +1 assegnalo alla variabile ordina. Almeno fin qui è corretto no?
    Poi ci dovrebbe essere se non è cosi assegnalo alla variabile ordina1 ad esempio.
    Come algoritmo dovrebbe avere un senso?
    No, la questione è già stata detta: per ordinare bisogna scambiare di posto gli elementi. Con una certa logica, ovviamente.

    railey ha scritto:


    Comunque ho letto che ci sono proprio algoritmi di ordinamento,ma non me ne faccio nulla di un lavoro già fatto se non capisco io come farne uno livello " base "e sbagliare per imparare.
    Farne "uno livello base" vuol dire poco/nulla. È altamente improbabile che tu (e la maggior parte delle altre persone, me compreso) riesca ad "inventare" un algoritmo di ordinamento che non è tra quelli ben noti. Perché in questo ambito moltissimo è già stato fatto e soprattutto ormai da tanti tanti anni. Ne esistono molti: BubbleSort, QuickSort, MergeSort, ShellSort, HeapSort (e svariati altri nomi che ora manco ricordo ....). È più facile che magari si riesca per intuito ad arrivare a fare una "variante" (e non necessariamente migliore) di un qualche algoritmo già noto e validato.

    Quindi la questione è semplice: documentati sugli algoritmi di ordinamento, scegline uno semplice, leggi la spiegazione della logica (facilmente reperibile in rete) ed implementalo. Punto.
  • Re: Ordinare array in ordine crescente java

    Guardi la ringrazio, ma a trovare la soluzione in quel modo ci ero arrivato anche io.
    Volevo semplicemente ragionare con qualcuno che lo fa per mestiere per arrivare a capire dove sbagliavo e trovare una soluzione e non implementare o ideare chissà quale algoritmo.

    Spero non si offenda ma è come se venisse da me in studio per un problema e io le dicessi di guardare su internet scrivendo i suoi sintomi e vedere la documentazione per quei sintomi.

    Buona giornata.
  • Re: Ordinare array in ordine crescente java

    railey ha scritto:


    ma a trovare la soluzione in quel modo ci ero arrivato anche io.
    La risposta che ho dato prima non era certo per sembrare scortese o cattivo, ci mancherebbe. Ma continui a chiedere es. "se array(quindi se il numero presente in quell'indice è> di array di i +1 assegnalo alla variabile ordina".
    Beh, la questione è: NON è quello il punto! Devi ragionare più ad "alto livello". Gli algoritmi di ordinamento si basano (praticamente un po' tutti) su confronti su coppie di valori e sullo scambio dei due valori in base al risultato del confronto.
    Pertanto il problema NON è l'assegnamento banale ad una variabile! Ti stai fissando troppo solo su questo.

    Prendi quindi pure un pezzo di carta e scrivi alcuni numeri a caso, es. 16 , 8 , 24 , 3 , 9 , 22
    Quali confronti penseresti di fare? Sarebbero sufficienti es.:

    il primo con il secondo
    il secondo con il terzo
    il terzo con il quarto
    il quarto con il quinto
    il quinto con il sesto
    ??

    Te lo dico subito io: no, non sono sufficienti. Perché anche a seguito dei confronti ed eventuali scambi, con una "sola passata" così non otterresti mai in generale una sequenza ordinata (salvo casi particolari, chiaro).
  • Re: Ordinare array in ordine crescente java

    railey ha scritto:


    Spero non si offenda ma è come se venisse da me in studio per un problema e io le dicessi di guardare su internet scrivendo i suoi sintomi e vedere la documentazione per quei sintomi.
    Le risposte sono state date. Se poi si reagisce in maniera stizzita a chi fa notare che, semplicemente, non c'è nemmeno l'ombra di uno scambio, allora la soluzione giusta è questa
    
    public class Esercizio10{
        public static void main(String[] args){
            int array[] = {5,7,3,4,12,2,89,34,11};
            System.out.println(java.util.Arrays.toString(array));
            java.util.Arrays.sort(array);
            System.out.println(java.util.Arrays.toString(array));
        }
    }
    
Devi accedere o registrarti per scrivere nel forum
7 risposte