Я потратил больше 10 часов + при попытке отсортировать следующие (шестнадцатеричные) в сортировке LSD radix, но не помогло. В Интернете очень мало материала по этому вопросу.Radix Sort Base 16 (Hexadecimals)
0 4c7f CD80 41fc 782c 8b74 7eb1 9a03 AA01 73f1
Я знаю, что я должен маскировать и выполнять битовые операции для обработки каждой шестнадцатеричной цифры (4 бита), но не имею ни малейшего представления о том, как и где ,
Я использую код (я понимаю) от GeeksforGeeks
void rsort(int a[], int n) {
int max = getMax(a, n);
for (int exp = 1; max/exp > 0; exp *= 10) {
ccsort(a, n, exp);
}
}
int getMax(int a[], int n) {
int max = a[0];
int i = 0;
for (i = 0; i < n; i++) {
if (a[i] > max) {
max = a[i];
}
}
return max;
}
void ccsort(int a[], int n, int exp) {
int count[n];
int output[n];
int i = 0;
for (i = 0; i < n; i++) {
count[i] = 0;
output[i] = 0;
}
for (i = 0; i < n; i++) {
++count[(a[i]/exp) % 10];
}
for (i = 1; i <= n; i++) {
count[i] += count[i - 1];
}
for (i = n - 1; i >= 0; i--) {
output[count[(a[i]/exp) % 10] - 1] = a[i];
--count[(a[i]/exp) % 10];
}
for (i = 0; i < n; i++) {
a[i] = output[i];
}
}
Я также проверил все StackOverflow по этому вопросу, но ни один из них не покрывает детали.
Переменная 'exp' используется неправильно. См. [Эта статья для примера] (https://en.wikipedia.org/w/index.php?title=Radix_sort&diff=654611185&oldid=654610962). Вам нужно прокрутить страницу до раздела «Пример в C» **. Обратите внимание, что их 'exp' начинается с 1 и умножается на базу на каждом проходе через цикл. – user3386109
@WeatherVane, а не текст, они являются частью массива, скажем, массив в основной функции. – itproxti