【发布时间】:2017-03-14 00:45:51
【问题描述】:
我花了 10 小时以上的时间尝试在 LSD 基数排序中对以下(十六进制)进行排序,但无济于事。网上关于这个主题的资料很少。
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未正确使用。见this article for an example。您需要向下滚动到标题为“C 中的示例” 的部分。请注意,它们的exp从 1 开始,并在每次通过循环时乘以基数。 -
@WeatherVane,不是文本,它们是数组的一部分,比如主函数中的数组。
标签: c sorting radix-sort