C++基数排序(明白明了完美详细的实现)

C++基数排序(清楚明了完美详细的实现)
#include <iostream>
#define _MAX_SIZE  9
static const int b[_MAX_SIZE] = {0,10,100,1000,10000,100000,1000000,10000000,100000000};
using namespace std;

int GetSetNumber(int x)
{
    for (int i = 0; i < 9; i++)
    {
        if (x>=b[i] && b[i + 1] > x)//查表得到位数,这是求数字位数的比较快速的方法了。
            return i+1;
    }
}
struct Node
{
    Node *next;
    int data;//存储的数据。
    Node(int d = int()) :data(d), next(NULL){}
};
struct MyNode
{
    Node *adj;
    int data;//表示位数。
    MyNode(int d = int()) :data(d), adj(NULL){}
};
class HashNode
{
public:
    HashNode(int d = _MAX_SIZE)
    {
        table = new MyNode[_MAX_SIZE];

    }
    void Grial(int a[],int n)
    {
        for (int i = 0; i < n; i++)
        {
            int index = GetSetNumber(a[i]);
            Node *p = table[index].adj;
            Node *m = NULL;
            Node *s = new Node(a[i]);
            while (p != NULL && a[i]>p->data)
            {
                m = p;
                p = p->next;
            }
            if (m == NULL)
            {
                s->next = table[index].adj;
                table[index].adj = s;
                continue;
            }
            s->next = m->next;
            m->next = s;
        }
    }
    void Printf()
    {
        for (int i = 0; i < _MAX_SIZE; i++)
        {
            Node *p = table[i].adj;
            while (p != NULL)
            {
                cout << p->data << "  ";
                p = p->next;
            }
        }
    }
private:
    MyNode *table;
};
//先将位数进行排序。
//然后再将相同位数的再进行插入排序,HASH表超级完美的实现了,
//是不是比那些书上写的写法简单多了呢?并且时间效率只要o(n),
//空间效率也不太大。
int main()
{
    int a[] = {1,0,33,2,555,4,9,18};
    HashNode sh;
    sh.Grial(a,8);
    sh.Printf();
    return 0;
}