您的位置:首页 > 编程语言 > C语言/C++

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

2015-06-16 18:03 363 查看
#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: