基数排序C/C++代码实现

链式基数排序:

分配类排序不需要比较关键字的大小,它 是根据关键字中各位的值,通过对待排序记录进行若干趟 “ 分配 ” 与 “ 收集” 来实现排序的,是一种 借助于多关键字排序的思想对单关键字排序的方法。基数排序(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]
  • 6
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值