Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    68

    [Java] Problema con contatore Mege Sort

    Salve a tutti. Ho un problema nell'algoritmo del merge: nel ciclo for del metodo merge il contA e il contB vanno fuori dal range. Questi due contatori li uso per scorrere i due array passati come parametri, come posso risolvere? Ecco il codice..
    Grasieeee



    codice:
    public class MergeSort {
    
    	public static int [] merge (int [] a, int [] b) {
    		int contA = 0;
    		int contB = 0;
    		int [] array = new int [a.length + b.length];
    		
    		for (int i=0; i<array.length; i++) {
    			if (a[contA] <= b[contB]) {
    				array [i] = a[contA];
    				contA++;
    			}	
    			else {
    				array [i] = b[contB];
    				contB++;
    			}	
    		}
    		
    		return array;
    	}
    	
    	
    	
    	public static int [] mergeSort(int [] array) { // array è un array da ordinare
    		int meta = array.length/2;
    		int [] a;
    		int [] b;
    		
    		if (meta == 0)
    			return array;
    		else {
    			a = new int [meta];
    			b = new int [a.length - meta];
    			for (int i=0; i<a.length; i++)
    				a[i] = array[i];
    			for (int i=0; i<b.length; i++)	
    				b[i] = array [i+meta];
    			return merge(mergeSort(a), mergeSort(b));	
    		}
    		
    	}
    	
    	
    	
    	public static void stampa (int [] a) {
    		for (int i=0; i<a.length; i++) {
    			System.out.print ("[" + a[i] + "]");
    		}
    		
    		
    	}
    	
    	
    	
    	public static void main (String [] args) {
    		int [] a = {1, 3, 5, 7};
    		int [] b = {2, 4, 6, 8};
    		
    		int [] array = merge(a, b); 
    		stampa(array);
    		
    	}
    
    }

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    perchè tu passi 2 array di lunghezza 4, ma, gli elementi sono dallo 0 al 3.
    Devi controllare che i 2 cont non arrivino a 4, perchè quando succede accedono alla posizione 4 dell'array, che non c'è.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    68
    Quello l'avevo capito, però non saprei proprio come risolverlo.. Ho provato a mettere come condizione anche (contA<4 && contB<4) ma fa pasticci.. Tu come lo risolveresti? Grazie per la risposta..

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    68
    ho provato anche mettendo un while che mi cicla finchè il contA è minore di a.length && contB è minore di b.length ma niente da fare, in questo modo non mi riempie tutto l'array.... Qualcuno ha qualche idea???

  5. #5
    Utente di HTML.it L'avatar di desa
    Registrato dal
    Oct 2008
    Messaggi
    569
    Se ho capito bene, all'interno del ciclo for:

    codice:
    if (contA == a.length)
    {
      array[i] = b[contB];
      contB++;
    }
    else if (contB == b.length)
    {
      array[i] = a[contA];
      contA++;
    }
    else
    {
      if (a[contA] <= b[contB])
      {
        array[i] = a[contA];
        contA++;
      }
      else
      {
        array[i] = b[contB];
        contB++;
      }
    }

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    68
    grazieeeee Desa, RISOLTO!!! Se stasera ti trovi una statua sotto casa saprai chi te l'avrà scolpita!!

    Grazie 1000!

  7. #7
    Utente di HTML.it L'avatar di desa
    Registrato dal
    Oct 2008
    Messaggi
    569

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.