Radix Sort C++ Sin enmascarar bits
-
09-12-2019 - |
Pregunta
Tengo una cola y una serie de colas. buckets
es la matriz y collector
es la cola. pass
es un número entero que guarda de qué pase se trata.Tengo un método que me devuelve los contenidos de la primera celda de la cola llamado peek()
. shiftOne()
es un método que mueve el principio de una cola al final de otra.
Ahora este código no me funciona
bucket[((collector.peek()>>(pass * 8)) &0xFF)].shiftOne(collector);
He ido paso a paso y resulta que no estoy enmascarando los bits correctamente.Puedo cambiarlos pero eso es todo.Así que intentaré acceder al elemento 102 para una matriz de 10 elementos.¿Qué estoy haciendo mal?Sé peek()
y shiftOne()
porque puedo ordenar usando potencias y módulos.
Solución
Estás confundiendo radix-10 con radix-2.
El desplazamiento de bits se divide por 2, por ejemplo: 102 >> 1
= 102 / 2
= 51.
Similarmente: 102 >> 8
= 102 / 2^8
= 102 / 256
= 0 (en int
términos).
El código (i >> 8) & 0xFF
por ejemplo se utiliza para extraer el contenido de el segundo byte de lo dado i
valor.
Para su caso, siga con las divisiones por 10 con módulo.