基数排序
基本要求:
从键盘上输入n个程度为m的整数,要求输出这些整数的升序排列。
具体要求:
- 使用的数据结构是队列,利用顺序队列来实现
- 有良好的人机交互
- 能够输出每一趟分配和收集的情况
基本概念:
基数排序属于分配式排序、又称桶子法。通过键值的查询,将要排序的元素分配至某些“桶”中,以达到排序的作用。
具体思想:代码实现:
以整形为例,将整形10进制按每位拆分,然后从低位到高位依次比较
主要分为两个过程:
分配,先从个位开始,根据位值(0-9)分别放到0~9号桶中
收集,再将放置在0~9号桶中的数据按顺序放到数组中
重复分配收集过程,从个位到最高位为重复次数
#include
#include
#include#define Radix 10//代表Radix(10)个队列typedef int QElemType;
typedef struct
{
QElemType *base;
//初始化的动态分配空间,存储数据
int front;
//头指针,指向队列头元素,用来移动
int rear;
//尾指针,指向队列尾元素的下一位置,确定长度
} SqQueue;
//distribute进行第n趟分配
//原始数据保存在Q.base数组中
//ArrType是SqQueue类型的数组,
void distribute(SqQueue &Q,int n,SqQueue ArrType[])
{
//quot-商
//rem-存储每个数据的第n位(即第1位、第2位...第n位)的值
int i,c,temp,quot,rem;
//for置空Radix(10)个队列
for(i=0;
i0)
{
printf("队列[%d]队头指针front->",i);
for(c=0;
c
数据处理:
文章图片
文章图片
尾言:
基数排序法是属于稳定性的排序,其时间复杂度为O (nlog(r)m),其中r为所采取的基数,而m为堆数
【算法与数据结构|C语言基数排序——顺序队列实现】在某些时候,基数排序法的效率高于其它的稳定性排序法。
推荐阅读
- 人工智能|干货!人体姿态估计与运动预测
- 分析COMP122 The Caesar Cipher
- 技术|为参加2021年蓝桥杯Java软件开发大学B组细心整理常见基础知识、搜索和常用算法解析例题(持续更新...)
- C语言学习(bit)|16.C语言进阶——深度剖析数据在内存中的存储
- Python机器学习基础与进阶|Python机器学习--集成学习算法--XGBoost算法
- 数据结构与算法|【算法】力扣第 266场周赛
- 数据结构和算法|LeetCode 的正确使用方式
- leetcode|今天开始记录自己的力扣之路
- 人工智能|【机器学习】深度盘点(详细介绍 Python 中的 7 种交叉验证方法!)
- 网络|简单聊聊压缩网络