基数排序

【基数排序】十大排序算法之基数排序 【基数排序】十大排序算法之基数排序,是属于【稳定】的排序。 阅读详情

基数排序是将所有待比较数值(正整数)统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,一次进行一次排序。这样从最低位排序一直到最高位排序完成之后,数列就变成一个有序序列。

NOTE:
基数排序只能排序非负整数

效率

基数排序的时间复杂度为O(k∗n),其中n是排序元素个数,k是数字位数。需要注意的是这个时间复杂度不一定优于O(n∗logn).

实现

基数排序的过程图示如下:

这里写图片描述

int maxbit( int data[], int size )      //辅助函数,求数据的最大位数
{
    int i;
    //先求出最大数,再求最大数的位数.
    int maxData = data[0];
    for ( i = 1; i < size; ++i )
    {
        if ( data[i] > maxData )
            maxData = data[i];
    }
    i = 1;
    while ( maxData >= 10 )
    {
        maxData /= 10;
        ++i;
    }
    return i;
}

void radix_sort( int data[], int size )
{
    int d = maxbit( data, size );
    //int *temp = (int *)malloc( sizeof(int)*size );
    int temp[size];
    int count[10];                  //计数器
    int i, j, k;
    int radix = 1;
    for ( i = 1; i <= d; i++ )
    {
        for ( j = 0; j < 10; j++ )
            count[j] = 0;               //每次分配前清空计数器

        //(1)
        //将data中第i位为j的个数保存在count[j]中
        for ( j = 0; j < size; j++ )
        {
            k = ( data[j] / radix ) % 10;   //k为data中每个数第i位的数字
            count[k]++;
        }
        //count[j]中保存第i位小于j的数字的个数
        for ( j = 1; j < 10; j++ )
        {
            count[j] = count[j-1] + count[j];
        }
        for ( j = size-1; j >= 0; j-- )
        {
            k = ( data[j] / radix ) % 10;
            //printf( "k = %d, data[%d] = %d\n", k, j, data[j] );
            temp[count[k]-1] = data[j];
            count[k]--;
        }
        //(2)
        for ( j = 0; j < size; j++ )
        {
            //printf( "%d ", temp[j] );
            data[j] = temp[j];
        }
        radix = radix * 10;
    }
}
YOLOv8魔改网络后训练全零?别慌,关掉AMP混合精度训练试试 本文探讨了YOLOv8魔改网络后训练出现全零指标的问题,指出AMP混合精度训练与自定义网络结构的不兼容性。通过分析梯度消失现象和AMP工作原理,提供了关闭AMP、调整学习率等解决方案,并建议预防性开发实践以避免类似问题。 阅读详情

相关推荐

opencv实践项目-图片拼接之缝合线算法

opencv 图片缝合线算法

wyw0000的博客 2624

算法——排序算法

关于几个排序算法的介绍,之后会继续更新更多的排序算法

Yellow_Star的博客 876

日志异常检测详细整理,看这一篇就够了(附各项目代码链接)

对于不用的日志键,用它们的参数值向量训练一个参数值异常检测模型来检测有这些参数值反映的系统性能异常。与标准的GAN框架一样,D和G的参数是基于D的输出来更新的,因此鉴别器D可以被训练为尽可能敏感地将正确的标签分配给真实和虚假序列,而生成器将被训练为尽可能聪明地在经过足够多轮的迭代后欺骗鉴别器,即误导D将真实标签分配给虚假序列。LR:逻辑回归是有监督的模型,将处理后的特征矩阵以及标记作为模型的输入,得到训练后的模型,用此模型预测新出现的特征向量,以此判断特征向量是否为异常的,进而判断日志异常。

qq_20368489的博客 1万+

手把手教你基数排序

说到基数排序,个人认为这是一种非常神奇的排序方式。在小编初次了解它时,就被他魔幻的排序方式所折服。一.排序思路小编喜欢生动一点的讲解方式,大家请跟着小编的思路,一起探究一下吧,首先让我们假设有一组数:这里共有10个数,最大的989共有三位,所以我们比较到百分位即可,即遍历三次。首先假定我们准备10个桶。第一步,按个位存放 ,依次拿出。存放方式与哈希桶类似。比如32的个位是2,那么32就放入下标为2的桶中。如果有数放入同一个桶中,那么就按队列存放,确保先入先出。 之后,按下标将数据依次拿出,桶中有多个数据的先

weixin_61857742的博客 474

【Unity实战】HybridCLR热更快速集成

本文假设你已经通过UPM导入了HybridCLR、Addressables、il2cpp支持并具有一定的C#基础和Unity编辑器操作能力。

u012587406的博客 4995

Matlab PolySpace 静态分析实战:从零搭建嵌入式代码安全防线

本文详细介绍了如何使用Matlab PolySpace进行嵌入式代码静态分析,从环境搭建到实战配置,帮助开发者提前发现内存溢出、未初始化变量等潜在缺陷。通过案例分享和进阶技巧,展示如何提升代码安全性和可靠性,特别适合汽车ECU、医疗设备等安全关键系统开发。

weixin_33701617的博客 602

数据结构算法———基数排序

数据结构算法介绍之基数排序(Radix Sort)

1万+

YOLOv11改进策略【Neck】| GFPN 超越BiFPN 通过跳层连接和跨尺度连接改进v11颈部网络

本文记录的是利用颈部结构优化YOLOv11的目标检测网络模型。利用改进后的颈部网络,通过跳层连接,避免了在进行反向传播时的梯度消失问题,并且引入跨尺度连接,可以实现不同级别和层次的特征充分融合,获取足够的高层语义信息和低层空间信息交换,从而在大规模变化场景下提高检测性能。GIRAFFEDET: A HEAVY-NECK PARADIGM FOR OBJECT DETECTION-GFPN包含了上述的跳层连接(dense-link和log2nlog _{2} nlog2​n-link)以及跨尺度连接(Quee

Limiiiing的博客 3008

基数排序详解(LSD方法+MSD方法+思路+图解+代码)

基数排序:LSD排序法+MSD排序法

WengJM的博客 5139

【离线OCR】微信离线实现图片OCR文本和表格识别

基于微信本地OCR引擎(由最新版微信自动安装)。通过Python对其官方调用逻辑进行完整翻译和封装,使开发者可以用简单的API调用其强大的OCR功能。

专注于医院数据分析技术与系统开发的创作与分享。 2625

YOLOv11 改进入门篇 | 轻量级涨点技巧:GhostConv 替代普通卷积的实战指南

摘要: 本文介绍如何通过GhostConv改进YOLOv11,实现轻量化涨点。YOLOv11深度增加导致参数量、延迟和内存占用上升,GhostConv通过“本征特征+线性变换”策略,在精度几乎无损的情况下降低30%-50%计算量。文章详细解析GhostConv原理,对比普通卷积的参数量和FLOPs优势,并提供完整的代码级改造流程,包括模块实现、注册及网络配置。实验表明,该方法有效提升边缘端推理效率,适用于移动端等资源受限场景。

shrgegrb的博客 1657

什么是基数排序?

文章目录什么是基数排序稳定的计数排序基数排序的实现 什么是基数排序 稳定的计数排序 数据结构与算法 | 计数排序 计数排序的基本思路在这里就不多进行介绍了,如果不了解的可以看看我以前写的博客。 void countSort(vector<int>& arr) { int max = arr[0], min = arr[0]; //找出最大值和最小值,缩减范围 for(int i = 1; i < arr.size(); i++) {

凌桓丶的博客 1万+

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

基数排序与链式基数排序

折腾数据结构实验的时候遇到这一个算法。之前对此不甚了解,总算也找到一篇不错的文章。转载如下   基数排序 (Radix Sort) 基数排序是采用“分配”与“收集”的办法,用对多关键码进行排序的思想实现对单关键码进行排序的方法。 多关键码排序: 1.以扑克牌排序为例。每张扑克牌有两个“关键码”:花色和面值。其有序关系为: 花色: 面值:2 2.如果我们把所有扑克牌排成以下

atskyline 1万+

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

基数排序——详解

基数排序(英语:Radix sort)是一种非比较型的排序算法,最早用于解决卡片排序的问题。基数排序将待排序的元素拆分为个关键字,逐一对各个关键字排序后完成对所有元素的排序。如果是从第关键字到第关键字顺序进行比较,则该基数排序称为 MSD(Most Significant Digit first)基数排序;如果是从第关键字到第关键字顺序进行比较,则该基数排序称为 LSD(Least Significant Digit first)基数排序。

w_w_wwwww的博客 1241

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

基数排序算法

文章目录一、基数排序概述二、基数排序的步骤三、基数排序的代码实现 一、基数排序概述 基数排序(radix sort)属于 “分配式排序”(distribution sort),又称 “桶子法”(bucket sort)。基数排序的基本思想是:通过待排序元素的各个位的值,将待排序元素分配至某些 “桶” 中,达到排序的效果。 基数排序是桶排序的扩展,基数排序法是效率高的稳定性排序法。 二、基数排序的步骤 基数排序过程一般遵循下面的基本步骤: 首先确定待排序序列 arr 中最大的元素,得出元素的位数 N,位

Ronz 的博客 2703

基数排序--链式基数排序(Radix)

链式基数排序:属于”分配式排序”(distribution sort)基数排序法又称“桶子法”(bucket sort)或bin sort。 链式基数排序思想:透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用,基数排序法是属于稳定性的排序,其时间复杂度为O (nlog(r)m),其中r为所采取的基数,而m为堆数。 时间效率:设待排序列为n个记录,d个关键码,关键码的取值范围为radix,则进行链式基数排序的时间复杂度为O(d(n+radix)),其中,一趟分配时间复杂度为O

保福寺计算机 的专栏 2579

C++ 基数排序

基数排序的原理: (1)首先,把整数通过求余的方式拆分成“个位、十位、百位、… ”; (2)然后,统计每个整数的“个位、十位、百位、… ”出现的次数,之后把次数存到以“余数”为编号的桶子里; (3)最后,通过一个整数出现的次数-1,从而算出正确顺序的位置,再把整数放进去,就有顺序了。 #include &lt;iostream&gt; #include &lt;stdlib.h&gt; ...

辛旭东小小工作室 824

基数排序详解

基本概念: 基数排序(英语:Radix sort)是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数。 它是这样实现的:将所有待比较数值(正整数)统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到

daiyudong2020的博客 5221

【算法】基数排序

计数排序 学习基数排序之前首先学习计数排序。 计数排序假设每个元素都是在0到k之间的一个整数。 基数排序的基本思想,对于每个元素x,如果我们知道了小于x的元素的个数,就可以确定输出数组中元素x的位置,那么直接将元素x放到输出数组中。比如有3小于x的元素,那在输出数组中,x肯定位于第4个位置。 计数排序的算法用伪代码描述为: COUNTING-SORT(A,k) // 初始化数组C

weiersyuan的专栏 4416
上一篇: 红黑树
下一篇: 计数排序
Findway_
博客等级 码龄10年 36粉丝 117原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值