Metodo de bublesort do google

2 respostas
G

pessoal eu to fazendo um projeto que pega um vetor de n posições que acha seu maior numero e coloca no meio. Ate tudo bem… Depois tenho que pegar este mesmo vetor e dividi-lo em dois sem pegar o maior e ate ai blz. Mas quando vou organizar uma das metades do vetores com bublesort ele da erro de Exception de array!!!
Os metodos que construi foram estes:

public static void divH(int df[]){
	 int d[] = new int[4];
	 int e[] = new int[4];
	 
	 System.out.println("Metade do vetor original na parte esquerda do maior");
	 for(int q=0; q<4; q++){
	 	e[q] = df[q];
	 	System.out.print(e[q] + " - ");
	 }
	 
	 System.out.println("\n\n");
	 
	 System.out.println("Metade do vetor original na parte direita do maior");
	 for(int a=0; a<3; a++ ){
	    d[a] = df[a+5];
	    System.out.print(d[a] + " - ");
	 }
	   bublesort(e);
	}




public static void troca(int ar[], int m, int n){
	  int aux = ar[m];
	  ar[m] = ar[n];
	  ar[n] = aux;
	
	}
	
	public static void bublesort(int g[]){
		
		for(int ii= 0; ii<g.length; ii++){
		 for(int jj = g.length -1; jj > ii; jj++){
		 	if(g[jj] < g[ii]) troca(g,ii,jj);
		 }
		}	
	}

Espero que tenha sido claro. Alguem poderia me explicar o pq disso?
grato

2 Respostas

gwoliveira

gollun
O problema é que vc esta estourando o limite array (java.lang.ArrayIndexOutOfBoundsException:) pois no seu bublesort o jj vc tinha colocado do penúltimo elemento e ir crescendo ao invez de ir reduzindo na lista, acredito ter sido erro de digitação, mas segue abaixo o código correto:

public static void bublesort(int g[]) {

		for (int ii = 0; ii < g.length; ii++) {
			for (int jj = g.length - 1; jj > ii; jj--) {
				if (g[jj] < g[ii]) {
					 troca(g, ii, jj);
				}
			}
		}
	}

Abraços

G

valeu,deu certo…

Criado 21 de abril de 2007
Ultima resposta 22 de abr. de 2007
Respostas 2
Participantes 2