基数排序!

大鸡排~

  • 算法描述
    • 定义常量和全局变量
    • 初始化PowOfBase数组
    • 输入函数和输出函数
    • 获取某一位的基数值
    • 基数排序函数
    • 主函数
  • 完整代码

https://articles.zsxq.com/id_flaketn5n3uo.html

算法描述

定义常量和全局变量

const int MAXN = 100005;        // 1
const int MAXT = 8;             // 2
const int BASE = 10;            // 3
int PowOfBase[MAXT];            // 4
int RadixBucket[BASE][MAXN];    // 5
int RadixBucketTop[BASE];       // 6
  1. MAXN:表示数组a能容纳的最大整数数量
  2. MAXT:表示基数排序支持的最大数字位数,这里假设最大为8位数字
  3. BASE:表示基数排序的基数,这里使用十进制
  4. PowOfBase[MAXT]:用于存储BASE的不如次方
  5. RadixBucket[BASE][MAXN]:基数桶,用于在排序过程中临时存放不同基数位的数字
  6. RadixBucketTop[BASE]:记录每个基数桶中当前存放的数字数量

初始化PowOfBase数组

void InitPowOfBase() {PowOfBase[0] = 1;for (int i = 1; i < MAXT; i++)PowOfBase[i] = PowOfBase[i - 1] * BASE;
}
  1. 初始化PowOfBase数组,以便后续快速计算任意个位上的数字
  2. PowOfBase[I]存储BASE的第i次方

输入函数和输出函数

void Input(int n, int *a) {for (int i = 0; i < n; i++)scanf("%d", &a[i]);
}
void Output(int n, int *a) {for (int i = 0; i < n; i++) {if (i)printf(" ");printf("%d", a[i]);}puts("");
}

不多赘述

获取某一位的基数值

int getRadix(int value, int pos) {return value / PowOfBase[pos] % BASE;
}

返回整数value在第pos位上的基数值。例如,对于345,若pos为1,则返回4。

基数排序函数

void RadixSort(int n, int *a) {int i, j, top = 0, pos = 0;while (pos < MAXT) {    // 1memset(RadixBucketTop, 0, sizeof(RadixBucketTop)); // 2for (i = 0; i < n; i++) {int rdx = getRadix(a[i], pos);RadixBucket[rdx][RadixBucketTop[rdx]++] = a[i]; // 3}top = 0;for (i = 0; i < BASE; i++) {for (j = 0; j < RadixBucketTop[i]; j++)a[top++] = RadixBucket[i][j]; // 4}pos++; // 5}
}
  1. pos0MAXT-1,依次对各个位上的数字进行排序。
  2. 使用memset重置RadixBucketTop数组。
  3. 将所有数字按当前位的基数值分配到对应的桶中。
  4. 从桶中重新收集数字到数组a中。
  5. 对于每一位的排序完成后,进入下一位继续排序。

主函数

int a[MAXN];
int main() {int n;InitPowOfBase();while (scanf("%d", &n) != EOF) {Input(n, a);RadixSort(n, a);Output(n, a);}return 0;
}
  1. 声明数组a用于存储输入的整数
  2. 调用InitPowOfBase初始化次方数组
  3. 调用Input读取n个整数
  4. 调用RadixSort对数组a进行基数排序
  5. 调用Output输出排序后的数组

完整代码

#include <stdio.h>
#include <string.h>
const int MAXN = 100005;
const int MAXT = 8;
const int BASE = 10;
int PowOfBase[MAXT];
int RadixBucket[BASE][MAXN];
int RadixBucketTop[BASE];void InitPowOfBase()
{PowOfBase[0] = 1;for (int i = 1; i < MAXT; i++)PowOfBase[i] = PowOfBase[i - 1] * BASE;
}
void Input(int n, int *a)
{for (int i = 0; i < n; i++)scanf("%d", &a[i]);
}
void Output(int n, int *a)
{for (int i = 0; i < n; i++){if (i)printf(" ");printf("%d", a[i]);}puts("");
}
int getRadix(int value, int pos)
{return value / PowOfBase[pos] % BASE;
}
void RadixSort(int n, int *a)
{int i, j, top = 0, pos = 0;while (pos < MAXT){memset(RadixBucketTop, 0, sizeof(RadixBucketTop));for (i = 0; i < n; i++){int rdx = getRadix(a[i], pos);RadixBucket[rdx][RadixBucketTop[rdx]++] = a[i];}top = 0;for (i = 0; i < BASE; i++){for (j = 0; j < RadixBucketTop[i]; j++)a[top++] = RadixBucket[i][j];}pos++;}
}
int a[MAXN];
int main()
{int n;InitPowOfBase();while (scanf("%d", &n) != EOF){Input(n, a);RadixSort(n, a);Output(n, a);}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/32034.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MQ~消息队列能力、AMQP协议、现有选择(Kafka、RabbitMQ、RocketMQ 、Pulsar)

消息队列 消息队列看作是一个存放消息的容器&#xff0c;当我们需要使用消息的时候&#xff0c;直接从容器中取出消息供自己使用即可。由于队列 Queue 是一种先进先出的数据结构&#xff0c;所以消费消息时也是按照顺序来消费的。 常⽤的消息队列主要这 五 种&#xff0c;分别…

使用 DISPATCHERS 进行 Blueprint 之间的通信

文章目录 初始准备DISPATCHERS 的创建和绑定实现效果 初始准备 首先 UE5 默认是不提供 静态网格体编辑器也就是 Modeling Mode 的&#xff0c;这里需要从插件中添加 Modeling Tools Editor Mode 进入 Modeling Mode 模式&#xff0c;创建一个正方体 然后利用 PolyGroup Edit 和…

网络编程1

网络编程中&#xff0c;客户端调用close或者shutdown后&#xff0c;操作系统会给服务器发送一个FIN #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <arpa/inet.h>int main() {int sockfd;struct s…

Vue79-路由组件独有的2个新的生命周期钩子

一、需求 news.vue路由组件被缓存了&#xff08;因为想要保留里面的输入框的数据&#xff01;&#xff09;&#xff0c;导致&#xff0c;路由页面切走&#xff0c;组件也不会被销毁&#xff0c;所以&#xff0c;beforeDestroy()函数就不会被执行&#xff0c;所以&#xff0c;定…

npm、yarn、pnpm 最新国内镜像源设置和常见问题解决

1. npm 设置国内镜像源 1.1 镜像源概述 镜像源是软件包管理工具用来下载和安装软件包的服务器地址。由于网络原因&#xff0c;直接使用官方源可能会导致速度慢或连接失败的问题。国内镜像源可以提供更快的访问速度和更稳定的连接。 1.2 镜像源的选择 国内有许多可用的npm镜…

Java中如何使用设计模式来解决编程问题?

Java中使用设计模式来解决编程问题&#xff0c;可以显著提高代码的可复用性、可维护性和可读性。设计模式是一套被广泛应用于软件工程的解决方案&#xff0c;描述了在特定上下文中面对具体问题时的可复用解决方案。以下是几种常用的设计模式及其应用场景&#xff1a; 单例模式…

数据结构课设——文章编辑系统

需求分析(菜单 输入文章 统计字符 童子字符串出现次数 删除某子串 查看文章 保存文章 加载文章)、概要设计(算法功能设计 软件环境)、详细设计(主要数据类型 变量 函数 算法流程图)、调试分析(非法合法测试数据、遇到问题解决方案解决结果)、总结、文献、附录(代码) …

React+TS前台项目实战(十二)-- 全局常用组件Toast封装,以及rxjs和useReducer的使用

文章目录 前言Toast组件1. 功能分析2. 代码详细注释&#xff08;1&#xff09;建立一个reducer.ts文件&#xff0c;用于管理状态数据&#xff08;2&#xff09;自定义一个清除定时器的hook&#xff08;3&#xff09;使用rxjs封装全局变量管理hook&#xff08;4&#xff09;在to…

文字模拟:经营酒店隐私政策

隐私政策 文字模拟&#xff1a;经营酒店隐私政策 一、引言 本隐私政策适用于我们提供的文字模拟&#xff1a;经营酒店小游戏&#xff08;以下简称“游戏”&#xff09;。我们非常重视用户的隐私和个人信息的保护&#xff0c;因此制定了本隐私政策&#xff0c;以解释我们如何…

在scrapy中使用Selector提取数据

经院吉吉&#xff1a; 首先说明一下&#xff0c;在scrapy中使用选择器是基于Selector这个对象滴&#xff0c;selector对象在scrapy中通过XPATH或是CSS来提取数据的&#xff0c;我们可以自己创建selector对象&#xff0c;但在实际开发中我们不需要这样做&#xff0c;因为respons…

御道源码(ruoyi-vue-pro)个人使用小结

御道源码&#xff08;ruoyi-vue-pro&#xff09;个人使用小结 一、Git地址 1、平台项目简介及地址 2、开发指南&#xff0c;如图所示&#xff0c;部分功能需要收费&#xff0c;可自行了解 二、项目文件夹结构示例&#xff1a; 三、技术介绍 1.基于 Spring Boot MyBatis P…

Java字符串连接符拼接操作

在Java的算术运算符中的加法符号“ ”&#xff0c;可以用来进行算术运算&#xff0c;也可以用来当作连接符进行字符串的拼接。 当“ ”操作中出现字符串时&#xff0c;这个“ ”是字符串连接符&#xff0c;而不是运算符了。 会将前后的数据进行拼接在一起&#xff0c;并产生…

dll丢失应该怎么解决,总结5种解决DLL丢失问题的方法

在数字时代&#xff0c;我们与计算机的每一天都密不可分。然而&#xff0c;就像所有技术产品一样&#xff0c;我们的计算设备也时不时地会出现一些问题&#xff0c;让人头疼不已。就在上周&#xff0c;我遭遇了一个令人崩溃的技术挑战——DLL文件丢失。这个看似微不足道的小问题…

转--基于OpenEuler的Docker容器安装使用

/usr/sbin/sshd执行以下命令查看ssh服务是否已经开始监听22端口&#xff1a; netstat -tuln | grep :22看到以下输出证明ssh服务已启动&#xff1a; [rootmaster /]# netstat -tuln | grep :22 tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN …

【MySQL】 -- 事务

如果对表中的数据进行CRUD操作时&#xff0c;不加控制&#xff0c;会带来一些问题。 比如下面这种场景&#xff1a; 有一个tickets表&#xff0c;这个数据库被两个客户端机器A和B用时连接对此表进行操作。客户端A检查tickets表中还有一张票的时候&#xff0c;将票出售了&#x…

OpenCloudOS系统上安装Java环境

在腾讯云OpenCloudOS系统上安装Java环境&#xff0c;可以使用yum包管理器进行安装。以下是安装Java环境的步骤和示例代码&#xff1a; 首先打开终端。 执行以下命令以更新yum包索引&#xff1a; sudo yum update 安装OpenJDK Java环境&#xff0c;可以选择安装Java 8或者更…

【Linux基础IO】深入理解缓冲区

缓冲区在文件操作的过程中是比较重要的&#xff0c;理解缓冲区向文件刷新内容的原理可以更好的帮助我们更深层的理解操作系统内核对文件的操作。 FILE 因为IO相关函数与系统调用接口对应&#xff0c;并且库函数封装系统调用&#xff0c;所以本质上&#xff0c;访问文件都是通过…

ES数值类型慢查询优化

现象 某个查询ES接口慢调用告警&#xff0c;如图&#xff0c;接口P999的耗时都在2500ms: 基本耗时都在查询ES阶段&#xff1a; 场景与ES设定 慢调用接口为输入多个条件分页查询&#xff0c;慢调用接口调用的ES索引为 express_order_info&#xff0c;该索引通过DTS(数据同步…

STM32人工智能检测-筛选机器人

前言 本文描述了一种使用STM32进行机器人筛选的办法。筛选对象是我的粉s&#xff0c;删选办法是瞪眼法。 问题现象 每次当我的STM32 向外界发出一篇新的的报文&#xff0c;总能在1H之内得到focus&#xff0c;格式如下 [title][body][tail]于是我对各个focus 我报文的对象进…

Redis数据过期、淘汰策略

数据过期策略&#xff1a; 惰性删除&#xff1a; 设置该key过期时间后&#xff0c;我们不去管它&#xff0c;当需要该key时&#xff0c;我们在检查其是否过期&#xff0c;如果过期&#xff0c;我们就删掉它&#xff0c;反之返回该key。 这种方式对cpu友好&#xff08;只在用…