Java Bubble-Sort Não conferir o último loop através de

0

Pergunta

Eu estou tentando classificar um ArrayList, mas bateu em uma parede no momento. Abaixo, eu tenho um getId() função que obtém o id de um membro. Eu quero classificar a ArrayList por id de membro. Tenho verificado um poucos bons artigos sobre este e implementado o seguinte :

e.g (antes da ordenação) 11 22 33 44 55 66 77 88 99 00

e.g (depois de ordenar) 00 11 22 33 44 55 66 77 88 99

Member temp;

for (int i = 0; i < members.size(); i++) {
    Member s = members.get(i);
    System.out.println("S: "+s.getId());
            
    for (int j=0; j < members.size()-1; j++) {
        Member t = members.get(j+1);
        System.out.println("T: "+t.getId());
                
        if (s.getId() > t.getId()) {
        temp = s;
        s = t;
        t = temp;
        }
     }
  }
}

Eu fiz a impressão instruções acima para rastrear a causa raiz, mas ainda tentando descobrir o erro.

bubble-sort java
2021-11-24 04:07:41
1

Melhor resposta

2

O código para troca está errado:

if (s.getId() > t.getId()) {
   temp = s;
   s = t;
   t = temp;
}

Aqui você trocar apenas s com tmas os dados subjacentes members não são afetados. O correto:

for (int i = 0; i < members.size() - 1; i++) {
     for (int j = 0; j < members.size() - i - 1; j++) {
         Member s = members.get(j);
         Member t = members.get(j+1);
         if (s.getId() > t.getId()) {
             Collections.swap(members, j, j+1);
         }
    }
}
2021-11-24 04:35:16

Obrigado por ponteiros. Eu acho que estou chegando lá. Eu estou usando s = alunos.conjunto(i, t); e a sua parece atualizar-se bem, mas a condição torna a atualização de todos os valores para 1010 em vez disso.
Enthu

Ah eu quero ver o que podemos usar a Coleção.trocar o qual eu não estava ciente. Você pode explicar um pouco mais sobre os membros.tamanho() - 1 e membros.tamanho() - i - 1. Não é a condição de o mesmo publicado ou eu estou ausente?
Enthu

@Enthu eu tenho medo que você tem alguns mal-entendidos sobre o bubble sort. A comparação e a permuta acontecem entre elementos adjacentes.
chenzhongpu

Obrigado @chenzhongpu. Vou ler mais sobre isso. Muito obrigado pela ajuda! Foi muito útil para mim.
Enthu

Em outros idiomas

Esta página está em outros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................