数据结构 10 - 基数排序 && 堆排序

数据结构课程设计——药店的药品销售统计系统(排序应用) 药店的药品销售统计系统(排序应用) 问题描述 设计一系统,实现医药公司定期对销售各药品的记录进行统计,可按药品的编号,单价,销售量或销售额做出排名。 实现提示 在本设计中,首先从数据文件中读出各药品的信息记录,存储在顺序表中。各药品的信息包括:药品编号、药名、药品单价、销出数量、销售额。药品编号共4位,采用字母和数字混合编号,如:A125,前一位为大写字母,后三位为数字,按药品编号进行排序时,可采... 阅读详情

一、基数排序

基本思想:将一个序列先按个位数大小排序,再按十位数大小进行排序,依次直到最大值的最大位数。

说明:
(1)基数排序是对传统桶排序的扩展,速度很快
(2)基数排序是经典的空间换时间的算法,占用内存很大,当对海量数据进行排序时,容易造成OutOfMemoryError
(3)基数排序是稳定的

相关术语解释:
(1)稳定:如果a原本在b前面,而a=b,排序之后a仍在b的前面
(2)不稳定:如果a原本在b前面,而a=b,排序之后a可能会出现在b的后面
(3)内排序:所有排序操作都在内存中完成
(4)外排序:由于数据太大,因此把数据放在磁盘中,而排序通过磁盘和内存的数据传输才能进行
(5)时间复杂度:一个算法执行所耗费的时间
(6)空间复杂度:运行完一个程序所需的内存大小
(7)n:数据规模
(8)In-place:不占用额外内存
(9)Out-place:占用额外内存

代码实现:

public static void radixsort(int[] arr) {

        //1.找到最大的数的位数
        int max = arr[0];
        for (int i = 1; i < arr.length; i++) {
            if (arr[i] > max) {
                max = arr[i];
            }
        }
        int maxlength = (max + "").length();//把最大数转化为字符串,调用其length方法获得最大位

        //2.进行排序,总共进行maxlength轮排序
        for (int i = 1,n = 1; i < maxlength; i++,n*=10) {

            int[][] bucket = new int[10][arr.length];
            int[] bucketElementCounts = new int[10];
            //3.进行对应轮的各元素遍历排序
            for (int j = 0; j < arr.length; j++) {
                int digitOfElement = arr[j] / n % 10;//取模

                bucket[digitOfElement][bucketElementCounts[digitOfElement]] = arr[j];
                bucketElementCounts[digitOfElement]++;
            }

            ////4.把各桶中的数依次放回原数组
            int index = 0;
            for (int k = 0; k < bucketElementCounts.length; k++) {
                if (bucketElementCounts[k] != 0) {
                    for (int l = 0; l < bucketElementCounts[k]; l++) {
                        arr[index] = bucket[k][l];
                        index++;
                    }
                    bucketElementCounts[k] = 0;
                }
            }
            System.out.println("第" + i + "轮排序后的结果:" + Arrays.toString(arr));
        }
    }

深入理解堆排序与基数排序算法 本文详细探讨了堆排序和基数排序的原理和实现,包括堆排序的构建过程、时间复杂度分析以及基数排序的LSD和MSD分类和原理。通过对两种排序算法的深入分析,本文旨在为读者提供一个清晰的排序算法知识框架。 阅读详情

相关推荐

企业华为TaurusDB数据库国产替代要点全记录

国产化数据库全方位对比、从互联网企业的先进经验来看mysql的用法、及sql优化、sql异构修改、及数据同步方面都做了一些讲解

深耕互联网的码农,在AI及国产化浪潮下,希望把自己的能力输出给更多的人 1064

8-算法-计数排序

文章目录计数排序1. 动图演示2. JavaScript 代码实现3. Python 代码实现4. Go 代码实现5. Java 代码实现6. PHP 代码实现 计数排序 计数排序的核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。 1. 动图演示 2. JavaScript 代码实现 function countingSort(arr, maxValue) { var bucket = new Array(max

性感的小君君 337

MacOS Intel芯片实战:Docker Compose一键部署Dify全流程解析

本文详细解析了在搭载Intel芯片的MacOS系统上,使用Docker Compose一键部署开源LLM应用开发平台Dify的全流程。内容涵盖环境准备、Docker配置与镜像加速、代码拉取与配置初始化、服务启动与问题排查,以及访问验证与初步探索,旨在帮助开发者快速在本地搭建私有化AI应用开发环境。

ik678901234的博客 620

【leetcode学习笔记】堆排序、基数排序、排序算法总结

【leetcode学习笔记】堆排序、基数排序、排序算法总结

weixin_42685184的博客 908

CentOS7安装openGauss5.0.2LTS版本

该文档要根据自己的实际情况调整ip地址。要根据自己的实际网卡调整。

superhanyubo的专栏 2579

人机协作新纪元:AI会抢走IT人的饭碗吗?

产品经理用自然语言描述需求,AI将其转化为技术规格书(准确率已达89%)

820

基数排序和堆排序

基数排序和堆排序基数排序概念时间复杂度基本思路代码实现堆排序概念基本思路时间复杂度代码实现 基数排序 概念 基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或bin sort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用,基数排序法是属于稳定性的排序。 时间复杂度 时间复杂度为O (nlog®m),其中r为所采取的基数,而m为堆数,在某些时候,基数排序法的效率高于其它的稳定性排序法。

Px_picha的博客 804

把群晖NAS变成游戏开发服务器:Perforce与虚幻引擎深度整合的5个关键配置(含.p4ignore模板)

本文详细介绍了如何将群晖NAS配置为游戏开发服务器,重点讲解了Perforce与虚幻引擎的深度整合。通过五个关键配置节点,包括用户权限架构、Workspace策略、资产同步优化、仓库清洁度保障和编辑器深度集成,帮助小型团队打造高效开发环境。文章还提供了实用的.p4ignore模板和优化技巧,显著提升开发效率。

weixin_30430677的博客 318

堆排序思想和案例图解

堆排序的基本思想是:将待排序序列构造成一个大顶堆,此时,整个序列的最大值就是堆顶的根节点。将其与末尾元素进行交换,此时末尾就为最大值。然后将剩余n-1个元素重新构造成一个堆,这样会得到n个元素的次小值。如此反复执行,便能得到一个有序序列了 步骤一 构造初始堆。将给定无序序列构造成一个大顶堆(一般升序采用大顶堆,降序采用小顶堆)。   a.假设给定无序序列结构如下 2.此时我们从最后一个非...

Peter_Changyb的博客 8521

基于ST32 DAC7311数模转换器驱动代码及电路设计完整版

基于ST32的DAC7311模数转换器的电路设计及驱动代码完整版

qq_39626643的博客 3721

2023华为od机试C卷【最富裕的小家庭】C++ 实现

在一颗树中,每个节点代表一个家庭成员,节点的数字表示其个人的财富值,一个节点及其直接相连的子节点被定义为个小家庭。现给你一颗树,请计算出最富裕的小家庭的财富和。

MISAYAONE的博客 1239

数据结构——堆排序和基数排序

数据结构——堆排序和基数排序

m0_61857862的博客 344

机器学习扩散模型简介

​ 扩散模型是生成模型,在过去几年中越来越受欢迎,这是有充分理由的。仅在 2020 年代发布的几篇开创性论文就向世界展示了 Diffusion 模型的能力,例如在图像合成方面击败 GAN[6]。最近,从业者将看到DALL-E 2(OpenAI 上个月发布的图像生成模型)中使用的扩散模型。

gongdiwudu的专栏 4270

十大经典排序算法详解(三)-堆排序,计数排序,桶排序,基数排序

十大经典排序算法-堆排序,计数排序,桶排序,基数排序 1-堆排序 算法思想: 算法图解: 示例代码: 在这里插入代码片 复杂度分析: 2-计数排序 算法思想: 算法图解: 示例代码: 在这里插入代码片 复杂度分析: 3-桶排序 算法思想: 算法图解: 示例代码: 在这里插入代码片 复杂度分析: 4-基数排序 算法思想: 算法图解: 示例代码: 在这里插入代码片 复杂度分析: ...

lovely__RR的博客 4万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

基数排序&堆排序

基数排序 按照各个数字位数进行排序,分为LSD(最低位优先)和MSD(最高位优先)两种。复杂度为\(O(d(n+k))\),其中\(d\)为最大位数,\(n\)为排序数量,\(k\)为基数的种数。 #include <iostream> #include <algorithm> #include <cstring> using namespace st...

267

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

堆排序和基数排序

堆排序和基数排序 堆排序:是指利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。 时间复杂度:平均情况O(nlogn) 最好情况O(nlogn) 最坏情况O(nlogn) 空间复杂度:O(1) 不稳定 代码: 基数排序:属于“分...

IT_Quanwudi的博客 1469

【数据结构】堆、计数、桶、基数排序的实现

本文介绍了四种经典排序算法:堆排序、计数排序、桶排序和魁基数排序。堆排序通过建立最大/最小堆并重复调整堆 Thực hiện排序;计数排序利用统计元素出现次数实现非比较排序;桶排序将元素分配到多个桶中分别排序后合并;基数排序则按位数从低到高依次排序。每种算法都详细说明了思想、步骤和代码实现,并配有动画演示。这些算法各具特色,适用于不同场景,其中堆排序时间复杂度为O(nlogn),计数/桶/基数排序在特定条件下可达线性时间复杂度。

2301_79989168的博客 4911

数据结构与算法之基数排序

依次类推,直到最高位。有时候有些属性是有优先级顺序的,先按低优先级排序,再按高优先级排序。最后的次序就是高优先级高的在前,高优先级相同的低优先级高的在前。(img-ULh4SFrH-1713713034668)]// 定义一个一维数组,用于记录在temp中相应的数组中存放数字的数量。//记录数量的数组中,当前余数记录的数量不为0才取。//计算最大数字是几位数(才能知道排序次数)//把当前遍历的数据放入指定的数组中。//根据最大长度的数决定比较的次数。//记录取的元素需要放的位置。//存数组中最大的数字。

2301_79655496的博客 945

数据结构——计数、桶、基数排序

数据结构——计数、桶、基数排序 求点赞收藏评论关注!!! 感谢各位大佬的支持!!!

2301_80401288的博客 2138

SZU 数据结构 哈希表与排序 堆、归并、基数排序 AC代码

​ 本文为SZU 数据结构 课程 哈希表与排序章节 第三节课排序的AC代码 ​

2303_80677350的博客 1949

基数排序、堆排序分析与实现(Java)

目录基数排序基本思想算法实现堆排序基本思想算法实现简单测试(JUnit)源码 基数排序 基数排序(Radix Sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort),顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用,基数排序法是属于稳定的排序,其时间复杂度为O (nlog(r)m),其中r为所采取的基数,而...

zhangyuanshuai的博客 248

学习堆排序+基数排序并使用java写代码

堆排序是一种基于完全二叉树的排序算法,通过构建大顶堆(父节点值≥子节点值)实现排序。其核心步骤包括:1)从后向前调整节点构建初始大顶堆;2)交换堆顶与堆底元素后重新调整剩余元素。时间复杂度为O(nlogn),适用于大规模数据排序。基数排序则是按位分配的稳定排序算法,通过多次分配收集实现排序,时间复杂度为O(nk),其中k为数字位数。文章提供了两种排序的详细构建过程、复杂度分析及Java代码实现,并附有相关数据结构学习链接。

m0_64928156的博客 1125

探索数据结构:堆,计数,桶,基数排序的分析与模拟实现

在计算机科学中,排序算法是一门经典而重要的领域。堆排序、桶排序、计数排序和基数排序是其中几种性能优异的算法。堆排序利用堆这种数据结构,实现高效的排序;桶排序将数据分布到不同的桶中,通过各自的排序算法完成排序;计数排序和基数排序则通过统计元素出现次数或位数来完成排序。探索这些算法背后的原理和实现,让我们一窥排序算法的精彩世界。

Bettysweetyaaa的博客 2393

浅谈,堆排序,基数排序,归并排序,希尔排序。

堆排序: 堆排序是一种利用的堆的性质进行的选择排序; 堆实际上是一棵完全二叉树,其任何一非叶节点满足性质:Key[i]<=key[2i+1]&&Key[i]<=key2i+2或者Key[i]>=Key[2i+1]&&key>=key[2i+2] 即任何一非叶节点的关键字不大于或者不小于其左右孩子节点的关键字。 堆分为大顶堆和小顶堆,满足Key[i]>=Key[2i+1]&&key>=key[2i+2]称为大顶堆,满足 Key

qq_42348284的博客 619

十大经典排序算法(希尔排序、堆排序、计数排序、桶排序和基数排序)

桶排序的时间复杂度,取决于对各个桶之间数据进行排序的时间复杂度,因为其它部分的时间复杂度都为O(n).很显然,桶划分的越小各个桶之间数据越少,排序所用的时间也会越少,但相应的空间消耗会增大。......

weixin_59803490的博客 1538

【数据结构】插入排序、冒泡排序、堆排序、快速排序、基数排序、归并排序简略解析

临近考研、面试,抽了几个平时不太会写的排序算法重新温习了一下,下面做个总结,亦或者说用一句话概括一下简略思想吧。 插入排序 假设前i−1i-1i−1个元素已经有序,那么很容易通过O(n)O(n)O(n)的算法应该插入的位置,使得前i个元素有序,所以复杂度为:O(n2)O(n^2)O(n2) 冒泡排序 假设前iii个元素已经是已知序列中的前iii小元素,并且已经有序,那么将后面n−in-in−i个元素中的最小值(第i+1i+1i+1小元素)通过交换置换到i+1i+1i+1的位置即可。 堆排序 前置知识: 首

一只酷酷光儿的博客 520
上一篇: 数据结构 09 - 快速排序 && 归并排序
终难忘世外仙株寂寞林
博客等级 码龄6年 0粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值