C++实现链式基数排序
代码如下:
#include <iostream>
#include <cmath>
using namespace std;
typedef int KeyType;
const int END = -1;
const int Radix = 10;typedef struct Node
{KeyType key;struct Node *next;
};Node *CreateList()
{KeyType x;Node *q = nullptr;cin >> x;while (x != END){Node *p = new Node;p->key = x;p->next = q;q = p;cin >> x;}return q;
}int FindDigits(Node *p)
{int max = -1;while (p){if (p->key > max) max = p->key;p = p->next;}int digits = 1;while (max / 10 > 0){digits++;max = max / 10;}return digits;
}void Distribute(Node *&p,int digits, Node *f[], Node *r[])
{Node *q;while (p){q = p;p = p->next;int k = q->key;int radix = static_cast<int>(k / pow(10, digits - 1)) % 10;if (r[radix] == nullptr){r[radix] = q;f[radix] = q;r[radix]->next = nullptr;}else{q->next = r[radix]->next;r[radix]->next = q;r[radix] = q;}}
}void Collect(Node *&p, Node *f[], Node *r[])
{p = nullptr;for (int i = Radix - 1; i >= 0; i--){if (f[i] != nullptr){r[i]->next = p;p = f[i];r[i] = nullptr;//不要忘记这两步!!!f[i] = nullptr;}}
}void RadixSort(Node *&p)
{Node *f[Radix], *r[Radix];for (int i = 0; i < Radix; i++){f[i] = nullptr;r[i] = nullptr;}int digits = FindDigits(p);for (int i = 1; i <= digits; i++){Distribute(p, i, f, r);Collect(p, f, r);}
}void PrintElem(Node *p)
{while (p){cout << p->key << " ";p = p->next;}cout << endl;
}int main()
{Node *p;p = CreateList();PrintElem(p);cout << FindDigits(p) << endl;RadixSort(p);PrintElem(p);return 0;
}
C++实现链式基数排序相关推荐
- 数据结构:链式基数排序,通俗易懂!
思想 每一轮将多个数按由低位到高位的顺序,依次放入 多个 链表(桶)中. 输出时,将链表(桶)的数据依次合并到 一个 新的链表中. 例子 下面演示使用 链式基数排序,进行每一趟的"分配&qu ...
- 基数排序——多关键字排序(MSD/LSD)以及链式基数排序
排序 9.6 基数排序 9.6.1 多关键字排序 9.6.2 链式基数排序 9.6 基数排序 基数排序又被称为桶排序.与前面介绍的几种排序方法相比较,基数排序和它们有明显的不同.前面所介绍的排序方法都 ...
- c语言队列如何表示,队列的链式表示和实现(C语言)
#include #include #define OK 1; #define ERROR 0; #define OVERFLOW 0; #define TURE 1; #define FALSE 0 ...
- 数据结构和算法:(3)3.2线性表的链式存储结构
线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素也就是说你这个可以放在A地点,这个可以放在E地点,A地点和E地点中间可以隔开一个C地点和D地点,这样是允许的),这组存储单元可以存在 ...
- 数据结构与算法(6-2)二叉树的存储结构(顺序存储、链式存储)
目录 一.二叉树的顺序存储 存储方式 总代码 二.二叉树的链式存储(二叉链表) 1.存储结构 2.创建二叉树 总代码 一.二叉树的顺序存储 存储方式 //树的顺序存储 typedef struct { ...
- 带头结点的线性表的链式实现
复习了顺序实现后,自己模仿着写了链式实现 /*** @author lirui 带头结点的线性表的链式实现*/ public class MyLinkList<T> {// 内部类LNod ...
- 3.3 栈的链式存储结构
<?php header("content-type:text/html;charset=utf-8"); /*** 栈的链式存储结构的基本操作**包括* 1.初始化 __c ...
- 利用链式存储结构实现线性表
本图文主要介绍了如何利用链式存储结构实现线性表.
- 【数据结构】链式队列的实现(C语言)
队列的链式存储称为链式队列.链式队列就是一个特殊的单链表,对于这种特殊的单链表,它的插入和删除操作规定在单链表的不同端进行.链式队列的队首和队尾指针分别用front和rear表示. 链式队列要掌握以下 ...
最新文章
- 如何将Java源代码文件的编码从GBK转为UTF-8?
- 白月黑羽教python excel_发布程序
- Linux下网络流量实时监控工具 大全
- 在Vue中使用样式——使用内联样式
- Gazebo添加模型并控制模型运动作为动态障碍物(Ubuntu16.04, Gazebo7.16),附录动态链接库和静态链接库区别
- linux distribution timeline
- XDJM的情意比山高,比海深!!
- 基于机器视觉的眼镜镜片轮廓提取
- 给eclipse安装反编译
- spring boot学生课程考试系统的设计与实现毕业设计源码171548
- 用混淆矩阵计算kappa系数
- 如何写论文?新手小白快速入门!
- oracle查看密码期限,oracle永久密码和登陆次数无限制设置
- ID卡线圈和IC卡线圈的区别
- 麦肯锡:释放智能网联汽车数据全生命周期价值​潜力
- 计算机语言中daly什么意思,计算机存储器 - dalyHu的个人空间 - OSCHINA - 中文开源技术交流社区...
- cv2显示图片显蓝色
- u盘上1T linux系统部署到4T硬盘,bios使用Legace启动(实践可用)
- 金数据统计表自动填写
- JAVA:如何读写txt文件,并解决中文乱码问题
热门文章
- 【C#程序设计】教学讲义——第一章:C#语言概述
- 【专升本计算机】专升本计算机期末考试复习题(B卷附答案)
- 【专升本计算机】甘肃省普通高等学校专升本考试计算机全真模拟试卷(一)
- 打开vs2010,提示无效的许可证数据,需要重新安装
- C语言之去掉https链接的默认443端口
- 剑指offer之求两个链表的第一个公共节点
- linux之用openssl命令Base64编码解码、md5/sha1摘要、AES/DES3加密解密
- linux网络编程之setsockopt()函数来设置socket状态以及getsockopt函数只用总结
- 谷歌不支持调用摄像头麦克风_谷歌发布安卓11系统:全新界面、更严的隐私管理...
- 服务器安全维护包含,服务器安全维护包含