Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    InsertionSort

    Ciao a tutti.
    Io Ho il seguente problema.Sto cercando di eseguire InsertionSort su un vettore di 6 elementi:[9,5,8,1,4].

    Il metodo è il seguente:
    codice:
    public static void insSort(int[] a){
    		for(int j=2;j<a.length;j++){
    			int x=a[j];
    			int i=j-1;
    			while(a[i]>x && i>0){
    				a[i+1]=a[i];
    				i=i-1;
    			}
    			a[i+1]=x;
    		}
    	}
    Solo che mi ordina dal secondo elemento in poi.
    Praticamente l'output è:9,1,4,5,8....

    C'è qualcosa che non mi torna.

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    codice:
    	public static void insSort(int[] a)
    	{
    		for (int j = 1; j < a.length; j++) {
    			int x = a[j];
    			int i = j-1;
    			while (i >= 0 && a[i] > x) {
    				a[i+1] = a[i];
    				i = i-1;
    			}
    			a[i+1] = x;
    		}
    	}
    comunque, anche se era un problema di algoritmo alla fine, Java ha il suo forum dedicato. La prossima volta posta lì.
    every day above ground is a good one

  3. #3
    Il problema adesso è che dà errore in compilazione.Esce dall'indice massimo dell'array.

    Il codice è il seguente:

    codice:
    public class insertionSort {
    	public static void main (String[] args){
    		int[] a={9,6,1,7,3,5};
    		insSort(a);
    		for(int i=0;i<a.length;i++){
    			System.out.println(a[i]);
    		}
    		
    	}
    	public static void insSort(int a[]){
    		for(int j=1;j<a.length;j++){
    			int x=a[j];
    			int i=j-1;
    			while(a[i]>x && i>=0){
    				a[i+1]=a[i];
    				i=i-1;
    			}
    			a[i+1]=x;
    		}
    	}
    }

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Il problema adesso è che dà errore in compilazione.
    Compilazione o esecuzione? In questo momento non posso provarlo.

    Comunque while (i >= 0 && a[i] > x) anziché while (a[i] > x && i >= 0) non è la stessa cosa: nel primo caso (che è quello giusto) viene prima valutata la condizione i >= 0 e, se questa è falsa (cioè se i è negativo), la seconda non viene proprio valutata perché sarebbe inutile dato che c'è la AND, quindi non hai il problema dell'indice negativo. Invertendo le due condizioni, invece, nel momento in cui i diventa negativo viene comunque prima valutata la condizione a[i] > x e questo provoca la ArrayIndexOutOfBoundsException (ed è per questo che hai un errore in esecuzione, se poi hai anche qualcosa in compilazione posta i messaggi di errore).
    every day above ground is a good one

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328

    Moderazione

    Il linguaggio va obbligatoriamente indicato nel titolo.
    Oltretutto, Java (che non hai specificato) ha una sezione apposita.
    Il titolo, inoltre, dovrebbe essere più preciso: di problemi con InsertionSort ce ne possono essere migliaia, tutti diversi

    Correggo e sposto.


    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

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.