数据类型定义
#define MAXD 20 //位数
#define MAXR 20
typedef struct node {
char data[MAXD];
struct node* next;
}NodeType;
基数排序
void RadixSort(NodeType*& p, int r, int d) //LSD最低位优先
{
NodeType* head[MAXR], * tail[MAXR], * t; //链队的首尾指针
int i, j, k;
for (i = 0; i <= d - 1; i++) //从低位向高位开始循环
{
// 每次置空
for (j = 0; j < r; j++) //初始首尾指针
head[j] = tail[j] = NULL;
// 不断分配链队
while (p != NULL) // 对原链表每个节点循环
{
k = p->data[i] - '0'; //找第K个链队
if (head[k] == NULL) //链队为空 则队头队尾均指向结点p
{
head[k] = p;
tail[k] = p;
}
else //非空时,结点进队
{
tail[k]->next = p;
tail[k] = p;
}
p = p->next; //取下一个待排序元素
}
// 不断重新收集 , 等待下一次分配
p = NULL; //重新用来收集所有结点
for (j = 0; j < r; j++) //收集:对于每一个链队循环
if (head[j] != NULL) //若第j个链队 是 第一个非空链队
{
if (p == NULL)
{
p = head[j];
t = tail[j];
}
else //若第j个链队 是 其他非空链队
{
t->next = head[j];
t = tail[j];
}
}
t->next = NULL; //最后一个顶点next置空
}
}