说到基数排序就需要谈到,多排码排序,多排码排序就是,有n个记录,每个记录都是由x个元素构成属性key,并且有其他的属性key2。那么就可以按照他的属性的key2优先级排序,然后再按照他的属性key排序或者反过来都行。
他的关键点是:有多个属性(key1.....keyn)。
基数排序的关键点就是:基数 排序 是 利用“ 分配” 和“ 收集” 两种 操作 对 单 排序 码 进行 排序 的 一种内部排序的方法。
如对10个数字进行基数排序:
首先分解出数字的个十百千位,然后按照他的个位分类,然后按照十位机型分类(分类的标准也就是基数就是0~9,因为数字都是0~9构成的)如此循环最后得出的结果。
源码直接摘抄自一个周颜军; 王玉茹; 关伟洲. 数据结构 (21世纪高等教育计算机规划教材) (p. 222). 人民邮电出版社
void RadixSort(RecType &R[], int n, int d, int radix) {
int i, j, k;
int fr[radix], re[radix], p;
for (i = 0;i< n;i++)
R[i].next = i + 1;
R[n].next = -1;
for (i = d;i >= 1;i--)
{ // 做 d 趟 分配、 收集
p = R[ 0]. next;
// 开始 分配
for ( j= 0;j< radix;j++) fr[j] = 0;
while (p != -1)
{
k = R[p].key[i];
if (fr[k] = = 0)
fr[k] = p;
else
R[re[k]].next = p;
re[k] = p; p = R[p].next;
} j = 0;
// 开始
while ( fr[ j] == 0 )
j++;
R[0].next = fr[j];
p = re[j];
for (k = j + 1;k< radix;k++)
if (fr[k]) {
R[p].next = fr[k];
p = re[k];
} R[p].next = -1;
}
}