Ajuda com ordenção de vetores

2 respostas
T

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

2 Respostas

R

esses exercícios de lógica de faculdade é o tipo da coisa que não combina com JAVA. Certamente existe uma classe que faz isso por você. Se não existe, certamente existe um framework, todo complicado e que ninguém mais pode fazer porque já virou padrão de mercado.

ViniGodoy

Ao postar códigos, por favor, siga essas dicas:

Criado 26 de fevereiro de 2011
Ultima resposta 26 de fev. de 2011
Respostas 2
Participantes 3