Radix Sort C++ Não mascara bits
-
09-12-2019 - |
Pergunta
Eu tenho uma fila e uma série de filas. buckets
é a matriz e collector
é a fila. pass
é um número inteiro que salva qual passagem é.Tenho um método que me retorna o contém da primeira célula da fila chamado peek()
. shiftOne()
é um método que move o início de uma fila para o final de outra.
Agora esse código não funciona para mim
bucket[((collector.peek()>>(pass * 8)) &0xFF)].shiftOne(collector);
Fui passo a passo e descobri que não estou mascarando os bits corretamente.Eu posso mudá-los, mas isso é tudo.Então tentarei acessar o elemento 102 para um array de 10 elementos.O que estou fazendo de errado?Eu sei peek()
e shiftOne()
porque posso classificar usando potências e módulos.
Solução
Você está confundindo Radix-10 com Radix-2.
A mudança de bits é a divisão por 2, por exemplo: 102 >> 1
= 102 / 2
= 51.
De forma similar: 102 >> 8
= 102 / 2^8
= 102 / 256
= 0 (em int
termos).
O código (i >> 8) & 0xFF
por exemplo, é usado para extrair o conteúdo de o segundo byte do dado i
valor.
Para o seu caso - opte pelas divisões por 10 com módulo.