Problemas com ordenação

Problemas com ordenação

by Simone Harnik -
Number of replies: 6

Pessoal, não estou entendendo qual a função do método

int[] ordenaTimes(ComparaTimes comparador)

Ele recebe o objeto comparador da interface ComparaTimes. Mas o que é esse objeto? Ele pode ser qualquer coisa? Tipo, ele pode ser um vetor de Strings?

Na verdade, não consigo entender como é pra ser feito esse mecanismo de ordenação. Apesar de o enunciado dizer que é "trivial". Não é tão trivial assim, não, para quem é leigo.

Já consegui ordenar os nomes dos clubes, mas durante o processo de ordenação não consigo recuperar os índices. Isso porque os algoritmos modificam a posição dos clubes no vetor original...

Alguém tem uma pista?

Abs. e muito obrigada.

Simone

In reply to Simone Harnik

Re: Problemas com ordenação

by Maria Belotti -
Então Simone.

O negócio todo é esse vetor de índices. Eu vou te dar uma dica, se você não conseguir, poste novamente e eu posso te ajudar mais (acho que é bem importante você tentar fazer, para compreender o algoritmo de ordenação).

O coisa é você tentar colocar dentro do algoritmo de ordenação um vetor INDICE[] assim:

se array [i] vira array[j] depois da ordenação, então INDICE[i] = j.

você precisa entender como funciona a ordenação para poder fazer isso...
então a minha dica é você criar uma classe que recebe um vetor de arrays e os ordena pelo método da inserção direta (coloquei um arquivo em anexo), daí você pode fazer uns testes.

um site que eu já postei no forum e que é muito bom é esse:

http://maven.smith.edu/~thiebaut/java/sort/demo.html

que ajuda bastante a entender como funciona o algoritmo de ordenação.

é isso aí. espero que eu tenha ajudado.
In reply to Maria Belotti

Re: Problemas com ordenação

by Simone Harnik -

Oi, Maria, obrigada pela ajuda. Mas a dúvida é outra, na verdade.

Eu entendi como funciona a ordenação. Passei o dia inteiro vendo isso... rsboca aberta

O que eu não entendo é onde esse algoritmo tem de ficar no programa. Ele deve ser colocado na Classe ComparaTimesPorNome ou no método ordenaTimes?

Já fiz vários exercícios, arrumei strings e números com os três exemplos de ordenação. O que eu não consigo entender é como isso tem de entrar no programa, sabe?

Acho que o problema é aquele (ComparaTimes comparador) que aparece no enunciado, na chamada do método OrdenaTimes...

Será que me expliquei melhor?

Super obrigada pela ajuda! Fico no aguardo...

Abração

In reply to Simone Harnik

Re: Problemas com ordenação

by Allan Corrêa de Negri -

Simone, talvez ajude se eu enviar a estrutura do meu código fonte(foi no chute, mas funciona!):

static void imprimeClassificação(int[][] E)

{

..

ComparaTimesPorPGDecrescente obj = new  ComparaTimesPorPGDecrescente(Array pontos Ganhos  conterá os valores da coluna PG);  

pontos Ganhos==>Array que você usará para comparar no "IF do ordenaTimes"
     ordenaTimes(obj);      //Simone, é isso que você quer? 

...

}

public static class ComparaTimesPorPGDecrescente implements ComparaTimes
  {   
   int [] Matriz que será comparada no metodo abaixo(boolean éMenor)

    public boolean éMenor(int i, int j)
    {            

...

Atualiza o array(que contem pontos ganhos) vindo do Construtor ComparaTimes==> tem que fazer isso senão a ordenação não funciona corretamente
Array que você deve comparar , vindo do construtor  ComparaTimes, onde você retornará true ou false
     
    

...  
          }

 ComparaTimesPorPGDecrescente(int []p)==> construtor comparaTimes
    {          

...
 Matriz que será comparada no metodo(boolean) = P[X]   

...

     }      

}//fecha chave da classe  ComparaTimesPorPGDecrescente

static int [] ordenaTimes(ComparaTimes comparador)(eu usei o metodo BOLHA)

{

abaixo você deverá inserir o tipo de ordenção que você quiser (Ex.: Inserção Direta....) o que mudará será BASICAMENTE a condição(mostrada a baixo)

....

if(comparador.éMenor(j-1, j)){ // usará o metodo boolean éMenor, onde este devolverá true ou false

 // se você usar a Inserção direta, PROVAVELMENTE o principal a mudar será a condição comparador.éMenor(......)

se true troca os atributos da matriz

se false não faz nada

...

}

 public static void main (String [] args)
  {  
    calculaEstatisticas(geraResultado());                
       imprimeClassificação(matriz geral que representa no código fonte calculaEstatisticas(geraResultado());  );       
  }

Espero ter ajudado! BOA SORTE.

In reply to Allan Corrêa de Negri

Re: Problemas com ordenação

by Simone Harnik -

Isso mesmo, Allan. É a estrutura do código que não estava entendendo.

Vou estudar bastante seu exemplo. Muito obrigada! Se tiver nova dúvida posto de novo. Mas ainda vou ficar absorvendo suas informações.

Grande ajuda mesmo.

Abraços!

In reply to Simone Harnik

Re: Problemas com ordenação

by Marcelo Finger -
Oi Simone.

>Pessoal, não estou entendendo qual a função do método

>int[] ordenaTimes(ComparaTimes comparador)

>Ele recebe o objeto comparador da interface ComparaTimes. Mas o >que é esse objeto?

A interface ComparaTimes força a implementação de apenas um método: éMenor( Time t1, Time t2). Ela serve pra v ter apenas uma versão do método ordenaTimes. Só que uma hora v vai querer ordenar pelo ordem alfabética dos nomes dos times, outra hora vai querer ordenar por pontos totais para dar a classificação do campeonato. Para cada um destes casos v deve criar uma classe que implementa a interface ComparaTimes, e passar um objeto desta classe como parâmetro para a função ordenaTimes.

Isso foi amplamente discutido em sala de aulas, no capítulo de interfaces.

Marcelo
In reply to Marcelo Finger

Re: Problemas com ordenação

by Simone Harnik -

Olá, professor,

Muito obrigada pela ajuda. O senhor tem razão. Realmente foi "amplamente discutido em sala de aulas, no capítulo de interfaces". Infelizmente, os exemplos que a apostila traz são um tanto irreais e pouco aplicáveis.

Daí a dificuldade de implantar um conceito aprendido em sala de aula no exercício de programação.

Abraços, espero que entenda a minha dificuldade. Aliás, pelo que tenho visto pelos corredores do IME, a maior parte dos estudantes que nunca estudou java na vida (ou outro tipo de linguagem) está tendo dificuldades com o assunto.

[Nada rigorosa essa frase (não desenvolvi nenhum método estatístico para avaliar a probabilidade de ter dififculdade na disciplina) piscando. Pura observação...]

Abraço grande!

Simone