我手头的一本书上说:
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;}
- Mooing Duck