/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package mergesort;
/**
*
* @author CH
*/
public class Merge {
public static void Merge(int vetor[], int inicio, int fim)
{
if ((fim-inicio+1)>1)
{
int mid = ((fim-inicio))/2;
int[] subvet1 = new int[mid+1];
preencher(vetor, subvet1, inicio, mid);
int[] subvet2 = new int[fim-mid];
preencher(vetor, subvet2, mid+1, fim);
Merge(subvet1,inicio,mid);
Merge(subvet2,mid+1,fim);
finalorganize(subvet1,subvet2,vetor);
}
}
public static void preencher(int vetor[], int subvet[], int inicio, int fim)
{
int sp=0;
for(int x=inicio; x <= fim; x++)
{
subvet[sp]=vetor[x];
sp++;
}
}
public static void finalorganize(int subvet1[],int subvet2[], int vetor[])
{
int p1=0;
int p2=0;
int x=0;
for( x=0; x<vetor.length; x++)
{
if(((p2>subvet2.length)&&(p1<subvet1.length))||(subvet1[p1]<subvet2[p2]))
{
vetor[x]=subvet1[p1];
p1++;
}
else
if(((p1>subvet1.length)&&(p2<subvet1.length))||(subvet2[p2]<subvet1[p1]))
{
vetor[x]=subvet2[p2];
p2++;
}
}
}
}
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package mergesort;
/**
*
* @author CH
*/
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
int x[]= new int[8];
x[0]=6;
x[1]=7;
x[2]=8;
x[3]=3;
x[4]=5;
x[5]=4;
x[6]=1;
x[7]=2;
Merge.Merge(x, 0, 7);
for(int y=0; y<x.length; y++)
{
System.out.println(x[y]);
}
}
}
[quote]Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: 1
at mergesort.Merge.finalorganize(Merge.java:48)
at mergesort.Merge.Merge(Merge.java:25)
at mergesort.Merge.Merge(Merge.java:23)
at mergesort.Merge.Merge(Merge.java:23)
at mergesort.Main.main(Main.java:30)
Java Result: 1[/quote]
___<
Então galera, estou tentando desenvolver um merge sort pra entender melhor o funcionamento, o problema é que eu to encontrando um pouco de dificuldades e nao consguindo compilar o que seria minha ideia…
Um metodo recursivo responsavel por particionar o vetor, copiar os dados referentes originais nesses sub-vetores particionados e repetir, até que o vetor particionado se torne unitario. Quando isso ocorrer eu entre na função de reorganizar, comparando so 2 subvetores menores e organizando-os em forma crescente… Bom, é que eu estou estudando matematica computacional e essa coisa de ir quebrando em vetores menores nao parece ser tão facil hehe…
Bom, já agradeço de ante-mão ae galera!