Возникли проблемы при реализации двоичной сортировки radix - PullRequest
0 голосов
/ 31 марта 2020

Я получил задание в классе для реализации алгоритма сортировки Binary Radix. Я тщательно следовал инструкциям, но это просто не работает. Правила заключались в том, что он должен использовать тип данных unsigned char и должен использовать устойчивый алгоритм сортировки (например, сортировку по счету) для сортировки битов. Это код:

unsigned char A[6];
unsigned char C[2];
unsigned char B[6];
A[0] = 14;
A[1] = 5;
A[2] = 2;
A[3] = 12;
A[4] = 228;
A[5] = 151;

for (size_t k = 0; k < 8; k++)
{
    for (int l = 0; l < 6; ++l) {
        B[l] = 0;
    }

    C[0] = 0;
    C[1] = 0;

    for (int i = 0; i < 6; i++)
    {
        C[(A[i] >> k) & 1]++;
    }

    C[1] = C[1] + C[0];

    for (int j = 0; j < 6; ++j) {
        B[--C[(A[j] >> k) & 1] ] = A[j];
    }

    swap(A, B);
}

A - входной массив (с числами, которые необходимо отсортировать), C - это массив подсчета значений для сортировки (установлен в два, поскольку он считает биты) и B - дополнительный массив для подсчета сортировки. Что я сделал не так? Спасибо!

...