книги у меня есть говорит, что это:Дать ведро сортировка в C++
а) Поместите каждое значение одномерного массива в строку массива ковшей на основе разряда единиц Значения в. Например, 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];
где х = 1, 10, 100, 1000 и т. Д. Я полностью потерял, как написать это сейчас.
'INT get_digit (целое число, Int цифра) {возвращает количество/INT ((станд :: пау (10.0, цифра))% 10;}' –
Это должно работать нормально, если предположить х == 1, 10, 100, .... –
Возможно, вы захотите использовать шестнадцатеричные цифры, а не десятичные цифры: сдвиг на 4 * n бит, а ANDing с 0xf кажется намного более естественным, чем использование вычисления по модулю. –