Prezados,
Estou iniciando em java e fiz a seguinte classe:
package ordenação;
import java.math.*;
/**
*
-
@author Ticiana
*/
public class CriarVetor {//1 para melhor caso, 2 para caso médio e 3 para pior caso
int[] vetor; int i,n; int lim_sup; int lim_inf ;
CriarVetor(){};
CriarVetor(int caso, int incrementos)
{n =incrementos * 20000; vetor = new int[n]; lim_sup=n; lim_inf=0; switch (caso) { case '1'://cria vetor ordenado crescente { for(i=0; i<n;i++) { vetor[i]=i; } } case '2'://cria caso médido { for(i=0; i<n;i++) { vetor[i]= (int)(Math.random()*n); } } case '3'://cria vetor ordenado decrescente { for(i=n; i<0;i--) { vetor[i]=i; } }
}
}
public void bubblesort () { int x,aux,j;
for(x=0;x< this.vetor.length -2; x++) { j = this.vetor.length -1;
while(j>i) { if (this.vetor[j]< this.vetor[j-1]) { aux = this.vetor[j]; this.vetor[j]=this.vetor[j-1]; this.vetor[j-1]=aux; } j=j-1; }
}
}
public void insercao_direta ()
{
int x,aux,j;
x=0;
for(i=0;i< this.vetor.length - 2;i++)
{
aux = this.vetor[i];
j= x-1;
while((this.vetor[j]>aux)&& (j>=0))
{
this.vetor[j+1]=this.vetor[j];
j--;
}
this.vetor[j+1]=aux;
}
}
void trocar(int [] vetor,int esquerda,int direita)
{
int aux;
if (esquerda<= direita)
{
aux = vetor[esquerda];
vetor[esquerda]= vetor[direita];
vetor[direita]=aux;
}
}
int particao(int v[], int lim_inf, int lim_sup)
{
if (lim_inf < lim_sup)
{
int pivo = v[lim_inf]; // seleccao do pivo pelo metodo simples
int esq = lim_inf; // Apontador esquerdo (do limite inferior)
int dir = lim_sup; // Apontador direito (do limite superior)
esq++; // avancar o limite inferior (pivo fica na 1. posicao)
for(;esq < dir;)
{
while (v[esq] < pivo)
esq++; // avancar apontador por cada elemento que se encontra
// no lado correcto
while (v[dir] > pivo)
dir–; // avancar apontador por cada elemento que se encontra
// no lado correcto
if (esq < dir) // se apontadores ainda nao estao trocados
trocar(v, esq, dir); // trocar os valores
}
if (v[lim_inf] > v[dir])
trocar(v, lim_inf, dir); // Colocar o pivo na posicao correcta
return(dir);
}
return(-1);
}
public void quicksort(int x)
// Array de numeros inteiros, Limite inferior e Limite Superior
{
if (lim_sup > lim_inf)
{
x = particao(vetor,lim_inf, lim_sup);
quicksort(x-1);
quicksort(x+1);
}
} //fim quicksort
public void heapsort()
{
int x,aux,filho,pai;
for(x=1;x<vetor.length -1;i++)
{
aux = vetor[i];
filho=x;
pai=(filho-1)/2;
while(( filho> 0) && (vetor[pai]<aux))
{
vetor[filho]=vetor[pai];
filho = pai;
pai= (filho-1)/2;
}
vetor[pai]=aux;
}
x = vetor.length -1;
while (x<2)
{
aux = vetor[0];
vetor[i]=vetor[0];
vetor[0]=aux;
aux = vetor[0];
pai =0;
if((vetor[2*pai +1]>vetor[2*pai+2])&& (2*pai+2 >= x))
{
filho = 2*pai + 1;
}else
{
filho = 2*pai + 2;
}
while((pai<i)&& (vetor[filho]< vetor[pai]))
{
vetor[pai]=vetor[filho];
pai=filho;
if((vetor[2*pai+1]>vetor[2*pai+2])&& (2*pai+2 >= x))
{
filho = 2*pai + 1;
}else
{
filho = 2*pai + 2;
}
}
vetor[filho]=aux;
}
}//fim heapsort
}
implementada durante a execução pelo seguinte código :
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
int i,j;
CriarVetor [] vetoresMelhorCaso = new CriarVetor[10];
CriarVetor [] vetoresMedioCaso = new CriarVetor[10];
CriarVetor [] vetoresPiorCaso = new CriarVetor[10];
for(i=0;i<10;i++)
{
vetoresMelhorCaso[i] = new CriarVetor(1,i);
vetoresMedioCaso[i] = new CriarVetor(2,i);
vetoresPiorCaso[i] = new CriarVetor(3,i);
}
String metodo;
metodo = jComboBox1.getSelectedItem().toString();
jLabel2.setText(metodo);
for(i=0;i<10;i++)
{
jTable1.setValueAt(((i+1)*20000),i , 0);
}
long [] resultadosMelhor = new long[10]; //vetor que armazenará o tempo dos algoritmos
long [] resultadosMedio = new long[10];
long [] resultadosPior = new long[10];
if (metodo.equals("BubbleSort"))
{
try{
for (i=0;i<10;i++)
{
long tempoini = System.currentTimeMillis();
vetoresMelhorCaso[i].bubblesort();
long tempofim = System.currentTimeMillis();
resultadosMelhor[i]= tempofim - tempoini ;
tempoini = System.currentTimeMillis();
vetoresMedioCaso[i].bubblesort();
tempofim = System.currentTimeMillis();
resultadosMedio[i]= tempofim - tempoini ;
tempoini = System.currentTimeMillis();
vetoresPiorCaso[i].bubblesort();
tempofim = System.currentTimeMillis();
resultadosPior[i]= tempofim - tempoini ;
}
}catch (Exception e)
{
jLabel2.setText("Erro de execução!!");
}
}
if (metodo.equals("HeapSort"))
{
try{
for (i=0;i<10;i++)
{
long tempoini = System.currentTimeMillis();
vetoresMelhorCaso[i].heapsort();
long tempofim = System.currentTimeMillis();
resultadosMelhor[i]= tempofim - tempoini ;
tempoini = System.currentTimeMillis();
vetoresMedioCaso[i].heapsort();
tempofim = System.currentTimeMillis();
resultadosMedio[i]= tempofim - tempoini ;
tempoini = System.currentTimeMillis();
vetoresPiorCaso[i].heapsort();
tempofim = System.currentTimeMillis();
resultadosPior[i]= tempofim - tempoini ;
}
}
catch (Exception e)
{
jLabel2.setText("Erro de execução!!");
}
}
if (metodo.equals("Inserção Direta"))
{
try{
for (i=0;i<10;i++)
{
long tempoini = System.currentTimeMillis();
vetoresMelhorCaso[i].insercao_direta();
long tempofim = System.currentTimeMillis();
resultadosMelhor[i]= tempofim - tempoini ;
tempoini = System.currentTimeMillis();
vetoresMedioCaso[i].insercao_direta();
tempofim = System.currentTimeMillis();
resultadosMedio[i]= tempofim - tempoini ;
tempoini = System.currentTimeMillis();
vetoresPiorCaso[i].insercao_direta();
tempofim = System.currentTimeMillis();
resultadosPior[i]= tempofim - tempoini ;
}
}
catch (Exception e)
{
jLabel2.setText("Erro de execução!!");
}
}
if (metodo.equals("QuickSort"))
{
try{
for (i=0;i<10;i++)
{
long tempoini = System.currentTimeMillis();
vetoresMelhorCaso[i].quicksort(0);
long tempofim = System.currentTimeMillis();
resultadosMelhor[i]= tempofim - tempoini ;
tempoini = System.currentTimeMillis();
vetoresMedioCaso[i].quicksort(0);
tempofim = System.currentTimeMillis();
resultadosMedio[i]= tempofim - tempoini ;
tempoini = System.currentTimeMillis();
vetoresPiorCaso[i].quicksort(0);
tempofim = System.currentTimeMillis();
resultadosPior[i]= tempofim - tempoini ;
}
}
catch (Exception e)
{
jLabel2.setText("Erro de execução!!");
}
}
for(i=0;i<10;i++)//preenche jtable com resultado dos tempos de execução
{
jTable1.setValueAt((resultadosMelhor[i]),i, 1);
jTable1.setValueAt((resultadosMedio[i]),i, 2);
jTable1.setValueAt((resultadosPior[i]),i, 3);
}
}
O qual teria que colocar os valores dos tempos de execução na tabela, de acordo com o método executado.
O Bubblesort trava o meu micro… o restante está dando erro de execução…
Alguém poderia me ajudar ?é um trabalho da faculdade.
Obrigada.
Ticiana