Radix Sort C++ Bits werden nicht maskiert
-
09-12-2019 - |
Frage
Ich habe eine Warteschlange und eine Reihe von Warteschlangen. buckets
ist das Array und collector
ist die Warteschlange. pass
ist eine Ganzzahl, die speichert, um welchen Durchgang es sich handelt.Ich habe eine Methode, die mir den Inhalt der ersten Zelle der aufgerufenen Warteschlange zurückgibt peek()
. shiftOne()
ist eine Methode, die den Kopf einer Warteschlange an das Ende einer anderen verschiebt.
Jetzt funktioniert dieser Code bei mir nicht
bucket[((collector.peek()>>(pass * 8)) &0xFF)].shiftOne(collector);
Ich bin Schritt für Schritt vorgegangen und habe festgestellt, dass ich die Teile nicht richtig maskiere.Ich kann sie verschieben, aber das ist auch schon alles.Also werde ich versuchen, auf Element 102 für ein Array mit 10 Elementen zuzugreifen.Was mache ich falsch?Ich weiß peek()
Und shiftOne()
weil ich nach Potenzen und Modulen sortieren kann.
Lösung
Sie verwechseln Basis-10 mit Basis-2.
Bei der Bitverschiebung handelt es sich um eine Division durch 2, also zum Beispiel: 102 >> 1
= 102 / 2
= 51.
Ähnlich: 102 >> 8
= 102 / 2^8
= 102 / 256
= 0 (in int
Bedingungen).
Der Code (i >> 8) & 0xFF
wird beispielsweise verwendet, um den Inhalt von zu extrahieren das zweite Byte des Gegebenen i
Wert.
Halten Sie sich in Ihrem Fall an die Division durch 10 mit Modul.