基数排序

说到基数排序就需要谈到,多排码排序,多排码排序就是,有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;
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值