Écrit seau de tri en c++

Un livre que j'ai dit ceci:

a) Placez chaque valeur du tableau à une dimension dans une ligne de la seau tableau basé sur la valeur du chiffre des unités. Par exemple, 97 est placé dans la ligne 7, 3 est placé dans la ligne 3, et 100 est placé dans la ligne 0. Ceci est appelé une "distribution de passe."

b) de la Boucle à travers le seau tableau ligne par ligne, et de copier les valeurs sur le tableau d'origine. Ceci est appelé un "rassemblement passer." Le nouvel ordre des valeurs précédentes dans le tableau à une dimension est de 100, 3 et 97.

c) Répétez ce processus pour chaque chiffre position.

J'ai beaucoup de mal à essayer de comprendre et de mettre en œuvre cette. Pour l'instant j'ai:

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];
}

Je pense que, dans le but de les trier par des unités, des dizaines, des centaines, etc, je peux utiliser ceci:

for(int i = 0; i < max; ++i)
    insert = (array[i] / x) % 10;
    bucket[insert];

où x = 1, 10, 100, 1000, etc. Je suis totalement perdu sur la façon d'écrire maintenant.

int get_digit(int number, int digit) { return number/int((std::pow(10.0,digit))%10;}
Qui devrait fonctionner correctement, en supposant que x == 1, 10, 100, ....
Vous pouvez utiliser sortilège de chiffres, pas de chiffres décimaux: Changement de 4*n bits et ANDing avec 0xf semble beaucoup plus naturel que d'utiliser un modulo de calcul.
Rieck et un appel à la pow...

OriginalL'auteur Jonathan Dewein | 2012-02-16