链式基数排序:
分配类排序不需要比较关键字的大小,它 是根据关键字中各位的值,通过对待排序记录进行若干趟 “ 分配 ” 与 “ 收集” 来实现排序的,是一种 借助于多关键字排序的思想对单关键字排序的方法。基数排序(RadixSorting)是典型的分配类排序
算法属性:
时间复杂度为O(n)
空间复杂度为O(n+ rd),(假设每个记录含d个关键字,每个关键字的取值范围为rd个值)。
稳定排序。
基数排序使用条件有严格的要求:需要知道各级关键字的主次关系和各级关键字的取值范围。
代码如下:
#include<stdio.h>
#include<stdlib.h>
#define MAX_NUM_OF_KEY 8 //构成关键字组成部分的最大值
#define RADIX 10 //基数,数字0~9
#define MAX_SPACE 1000 //静态链表最大空间
//结点结构
typedef struct
{
int date; //关键字
int keys[MAX_NUM_OF_KEY]; //关键字按位数存储
int next; //存放下一个结点所在数组中的下标位置
}SLCell;
//静态链表结果
typedef struct
{
SLCell r[MAX_SPACE];
int keynum; //关键字位数
int recnum; //静态链表的当前长度
}SLList;
//指针数组,记录子序列首尾记录的位置
typedef int ArrType[RADIX];
//分配
void Distribute(SLCell *r, int i, ArrType f, ArrType e)
{
int p, j;
//初始化指针数组
for (int j = 0; j <RADIX; j++)
{
f[j]