考研算法33天:基数排序 【基数排序】

news2024/12/23 15:54:01

算法介绍

我们前一天写了一道桶排序,今天开始看它的进化版:基数排序,为啥会有这个算法呢?因为我们桶排序有一部是需要统计每个数字出现的次数因此需要开一个相对大的数组

for(int i=0;i<n;i++){
        s[q[i]]++; 
    }

但是就像快速排序这道题,它的数值到了10的9次方了,咋映射呢?总不可能再开这么大一个数组吧?会溢出的。那咋办呢?于是就有了基数排序。

那么基数排序是啥意思呢?这个基数其实是指的进制中的基数,我们所做的其实就是将原本10进制的数转换为以r为基数的进制也就是r进制,然后再作比较。但是也并不是就直接排序,而是每个位进行排序:

举个例子:321 456 789 123 341 这五个数排序,那么基数排序的过程就是从低位向高位开始排,也就是根据最低位(个位)排序:321 341 123 456 789 然后根据10位排序:321 123 341 456 789然后根据百位排序:123 321 341 456 789 这样就排好了。当然这个例子是易于理解的,因为我们只是将10进制转换到了10进制而已,但是是每个位上比较(这样每一位上做投影就不需要开那么大的数组)。

算法题目

ac代码:

#include <iostream>

using namespace std;

const int N = 1000010;
int q[N], w[N],s[N];
//第一位参数d:根据参数大小和进制大小确定需要多少位
//第二位参数r:进制的基数。
void radix_sort(int d,int r,int n){
     int radix = 1;
     for(int i=1;i<=d;i++){
         for(int j=0;j<r;j++) s[j]=0;
         for(int j=0;j<n;j++) s[q[j]/radix%r]++;
         for(int j=1;j<r;j++) s[j] = s[j-1] + s[j];
         for(int j=n-1;j>=0;j--) w[--s[q[j]/radix%r]] = q[j];
        //  for(int j=1;j<n;j++) w[--s[q[j]/radix%r]] = q[j];
        //被注释这一行,如果按照这样写就是从大到小排序
         for(int i=0;i<n;i++) q[i] = w[i];
         radix = radix * r;
     }
    return;
}
int main(){
    int n;
    cin>>n;
    for(int i=0;i<n;i++)scanf("%d",&q[i]);
    radix_sort(5,100,n);
    for(int i=0;i<n;i++)printf("%d ",q[i]);
    return 0;
}

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

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

相关文章

三相一次重合闸程序逻辑原理(一)

该功能是在原线路保护的基础上&#xff0c;利用资源共享的原理&#xff0c;不增加任何硬件&#xff0c;采用软件方式实现无压或同期鉴定方式的三相一次重合闸&#xff08;该基本原理参见附录C&#xff09;。 &#xff08;一&#xff09;重合闸的起动 重合闸有两种起动方式&…

centos7 安装Python3.9

1. 安装编译相关软件 su yum -y groupinstall "Development tools" yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel yum install libffi-devel -y2.下载安…

【pycharm】 Anaconda3 和 pycharm 安装配置2

conda3更新2.4.2需要websocket库,后面配置好了虚拟环境就可以自动更新下载 现在就有了:python 控制台 看起来不能再python console里执行pip3 感觉会进入 anaconda3 的 python库? no such option: -e PS D:\XTRANS

漏洞深度分析 | Apache StreamPipes 存在权限绕过漏洞导致垂直越权

项目地址 https://github.com/apache/streampipes 项目介绍 Apache StreamPipes 使工业数据分析变得简单&#xff01; StreamPipes 是工业物联网的端到端工具箱。它带有针对非技术用户的丰富的图形用户界面&#xff0c;并提供以下功能&#xff1a; 快速连接超过 20 种工业协…

背包问题: 01背包, (python, golang, c)

01背包 题目 2. 01背包问题 - AcWing题库 有N件物品和一个容量是V的背包。每件物品只能使用一次。第i件物品的体积是vi&#xff0c;价值是wi。求解: 将哪些物品装入背包&#xff0c;可使这些物品的总体积不超过背包容量&#xff0c;且总价值最大。 输出最大价值。 思路 ht…

反调试专题丨反调试之BeingDebugged

一、x86下IsDebuggerPresent反调试以及反反调试 1、反调试 进程结构体PEB偏移0x2处是一个标志位&#xff0c;当当前程序在调试状态下时&#xff0c;这个标志位就会被改变&#xff1a; nt!_PEB 0x000 InheritedAddressSpace : UChar 0x001 ReadImageFileExecOptions : …

1-vue3初探学习1

vue3插件&#xff1b; vscode插件&#xff1b; 1.volar 【在vscode上安装】 -vue3.x的插件 2.浏览器作为服务的测试版本 Live Server --作为简要服务使用 1-vue3初探学习&#xff1a; 网站&#xff1a; https://cn.vuejs.org/ 2.cdn文件 https://unpkg.com/vue3/dist…

高性能消息中间件 RocketMQ

一、MQ简介 1.1 什么是MQ 消息&#xff1a;是MQ中最小的概念&#xff0c;本质就是一段数据。 队列&#xff1a;在MQ中使用队列的数据结构来存储消息。 MQ是把消息和队列结合起来&#xff0c;称为消息队列&#xff08;Message Queue&#xff09;&#xff0c;是基础数据结构中…

敏捷需求、迭代、缺陷规划管理工具

敏捷使用产品Backlog来管理需求&#xff0c;产品Backlog是一个需求的清单&#xff0c;按照需求的商业价值排序&#xff0c; 高优先级的需求在Backlog的最上层。产品Backlog是一个渐进明细的清单&#xff0c;它有4个主要特点&#xff0c;称之为DEEP&#xff1a; Detailed 合适的…

Midjourney推出5.2版本,更新zoom out功能

Midjourney是一款专业的图像处理软件&#xff0c;它可以让用户轻松地创造出高质量的图像。它最近宣布推出了5.2版本&#xff0c;这是一个重大的更新&#xff0c;其中最亮眼的功能就是zoom out功能。 zoom out功能可以让用户无限地缩小原始图像&#xff0c;同时保持图像的清晰度…

【http服务】使用命令来查看和停止端口

需求: 在Windows 10上&#xff0c;使用命令来查看和停止端口8000上的进程。 方法&#xff1a; 要查看所有端口以及它们所属的进程&#xff0c;您可以使用以下命令&#xff1a; Get-NetTCPConnection | Select-Object LocalPort, OwningProcess这将显示所有TCP连接的本地端口…

【Spring Cloud Alibaba Seata 处理分布式事务】——每天一点小知识

&#x1f4a7; S p r i n g C l o u d A l i b a b a S e a t a 处理分布式事务 \color{#FF1493}{Spring Cloud Alibaba Seata 处理分布式事务} SpringCloudAlibabaSeata处理分布式事务&#x1f4a7; &#x1f337; 仰望天空&#xff0c;妳我亦是行人.✨ &#x1f98…

CentOs8开启网卡配置

1.查看网卡文件 ls /etc/sysconfig/network-scripts/ 网卡文件名为 ifcfg-ens160 2.编辑网卡配置 vi /etc/sysconfig/network-scripts/ifcfn-ens160 按Esc结束编辑&#xff0c;然后冒号 : 输入 wq保存并退出 3.启用网卡 nmcli c up ens160 ##centos8网络管理命令 nmcl…

多元回归预测 | Matlab灰狼算法(GWO)优化极限学习机ELM回归预测,GWO-ELM回归预测,多变量输入模型

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 多元回归预测 | Matlab灰狼算法(GWO)优化极限学习机ELM回归预测,GWO-ELM回归预测,多变量输入模型 评价指标包括:MAE、RMSE和R2等,代码质量极高,方便学习和替换数据。要求2018版本及以上。 部分源码 %% 清空环…

AI智慧安监EasyCVR平台长时间运行出现协程高的现象是什么原因?

EasyCVR视频融合平台基于云边端协同架构&#xff0c;具有强大的数据接入、处理及分发能力&#xff0c;平台支持海量视频汇聚管理&#xff0c;可支持多协议接入&#xff0c;包括市场主流标准协议与厂家私有协议及SDK&#xff0c;如&#xff1a;国标GB28181、RTMP、RTSP/Onvif、海…

idea2019.3启动不起来_卡在启动界面

.其实是因为Windows的语音设置导致的. 这里可以,找到控制面板,然后找到,右上角查看方式,选择,类别 2.然后找到时钟和区域 点击时钟和区域 然后 点击区域 然后在区域界面 点击区域选项卡,然后找到 管理,点击管理,然后点击更改系统区域设置 然后看下面的图,这里不要勾选Beta版…

工程安全监测无线振弦采集仪在建筑物的应用分析

工程安全监测无线振弦采集仪在建筑物的应用 工程安全监测无线振弦采集仪是一种在建筑物中应用的重要设备。它通过无线采集建筑物内部的振动信息&#xff0c;对建筑物的安全性进行监测和评估&#xff0c;为建筑物的施工和使用提供了可靠的技术支持。本文将详细介绍工程安全监测…

ModaHub魔搭社区:向量数据库Milvus部署运维问题教程(一)

目录 部署运维问题 如果在安装 Milvus 时&#xff0c;从 Docker Hub 拉取镜像总是失败怎么办&#xff1f; Milvus 只能使用 Docker 部署吗&#xff1f; 为什么 Milvus 返回 config check error 的错误&#xff1f; 为什么在导入数据时 Milvus 显示 no space left on devic…

【Spring Cloud Alibaba Sentinel 实现熔断与限流】 —— 每天一点小知识

&#x1f4a7; S p r i n g C l o u d A l i b a b a S e n t i n e l 实现熔断与限流 \color{#FF1493}{Spring Cloud Alibaba Sentinel 实现熔断与限流} SpringCloudAlibabaSentinel实现熔断与限流&#x1f4a7; &#x1f337; 仰望天空&#xff0c;妳我亦是行人.✨…

黑马微信小程序-实现本地服务九宫格并展示商品列表

一、九宫格实现 1.获取数据 1.1准备接口 黑马接口&#xff1a;https://applet-base-api-t.itheima.net/categories 说明&#xff1a;这是获取九宫格的数据接口 1.2使用接口 说明&#xff1a;声明变量获取数据。 getGridList() {wx.request({url: https://applet-base-api-t.…