Radix Sort C ++ Не маскирует биты - PullRequest
0 голосов
/ 09 марта 2012

У меня есть очередь и и массив очередей.buckets - это массив, а collector - это очередь.pass - это целое число, которое сохраняет, который передается.У меня есть метод, который возвращает мне содержимое первой ячейки очереди с именем peek().shiftOne() - это метод, который перемещает голову одной очереди в хвост другой.

Теперь этот код не работает для меня

bucket[((collector.peek()>>(pass * 8)) &0xFF)].shiftOne(collector);

Я прошел шаг за шагом, и этоОказывается, я не маскирую биты должным образом.Я могу сдвинуть их, но это все.Поэтому я попытаюсь получить доступ к элементу 102 для массива из 10 элементов.Что я делаю неправильно?Я знаю peek() и shiftOne(), потому что я могу сортировать с использованием степеней и модулей.

1 Ответ

2 голосов
/ 10 марта 2012

Ты путаешь radix-10 с radix-2.

Сдвиг битов делится на 2, например: 102 >> 1 = 102 / 2 = 51.
Аналогично: 102 >> 8 = 102 / 2^8 = 102 / 256 = 0 (в int терминах).

Код (i >> 8) & 0xFF, например, используется для извлечения содержимого второго байта данного i значения.

Для вашего случая - придерживаться деления на 10 с модулем.

...