Ae pessoal…na boa?
to eu dnv aki atucando com esse problema hehehe…
é o seguinte
tenho que implementar o mergeSort… implementei mas ele tah dando IndexOfBoundsException… eu vi onde é, mas me parece que o código esta certo… não sei o que mudar pra solucionar isso…
abaixo esta o código do merge q implementei,…tem um System.out no meio para imprimir o “esq e o dir” que pelo que vi é ali que esta dando erro…
obrigado pela ajuda pessoal
abraços
[code]import java.util.*;
public class MergeSort {
public void mergeSort(ArrayList<Integer> vetor, int esq, int dir){
System.out.println("Esq: "+esq+" Dir: "+dir);
if(esq==dir) return;
if(dir-1==1){
if(vetor.get(esq)>vetor.get(dir)){
int aux = vetor.get(esq);
vetor.set(esq, vetor.get(dir));
vetor.set(dir, aux);
}
return;
}
int meio = (dir+esq)/2;
mergeSort(vetor, esq, meio);
mergeSort(vetor, meio+1, dir);
uniao(vetor, esq, meio, dir);
}
public void uniao(ArrayList<Integer> vetor, int i, int m, int f){
ArrayList<Integer> vetor1 = new ArrayList<Integer>(m-i+1);
ArrayList<Integer> vetor2 = new ArrayList<Integer>(f-m+1);
int aux, indVetor1 = 0, indVetor2 = 0;
for(aux = i; aux < m + 1; aux++){
vetor1.set(indVetor1, vetor.get(aux));
indVetor1++;
}
for(aux = m; aux < f; aux++){
vetor2.set(indVetor2, vetor.get(aux));
indVetor2++;
}
int i1 = 0, i2 = 0;
while(i1 < indVetor1 && i2 < indVetor2){
if(vetor1.get(i1) < vetor2.get(i2)){
vetor.set(i, vetor1.get(i1));
i1++;
}
else{
vetor.set(i, vetor2.get(i2));
i2++;
}
i++;
}
while(i1 < indVetor1){
vetor.set(i, vetor1.get(i1));
i1++;
i++;
}
while(i2 < indVetor2){
vetor.set(i, vetor2.get(i2));
i2++;
i++;
}
}
}[/code]