【发布时间】:2012-03-08 04:52:53
【问题描述】:
我的一本书是这样说的:
a) 根据值的个位,将一维数组的每个值放入桶数组的一行中。例如,97 放在第 7 行,3 放在第 3 行,100 放在第 0 行。这称为“分发通道”。
b) 逐行遍历存储桶数组,并将值复制回原始数组。这被称为“聚会通行证”。一维数组中前面的值的新顺序是 100、3 和 97。
c) 对每个后续数字位置重复此过程。
我在尝试理解和实施这一点时遇到了很多麻烦。到目前为止,我有:
void b_sort(int sarray[], int array_size) {
const int max = array_size;
for(int i = 0; i < max; ++i)
int array[i] = sarray[i];
int bucket[10][max - 1];
}
我在想,为了按个、十、百等对它们进行排序,我可以使用这个:
for(int i = 0; i < max; ++i)
insert = (array[i] / x) % 10;
bucket[insert];
其中 x = 1、10、100、1000 等。我现在完全不知道如何写这个。
【问题讨论】:
-
int get_digit(int number, int digit) { return number/int((std::pow(10.0,digit))%10;} -
这应该可以正常工作,假设 x == 1, 10, 100, ....
-
您可能希望使用十六进制数字,而不是十进制数字:移位 4*n 位并与 0xf 进行与运算似乎比使用模数计算更自然。
-
@Eugen Rieck 并呼吁 pow...
标签: c++ algorithm sorting bucket