【Java数据结构】了解排序相关算法

news2025/1/31 6:16:03

基数排序

基数排序是桶排序的扩展,本质是将整数按位切割成不同的数字,然后按每个位数分别比较最后比一位较下来的顺序就是所有数的大小顺序。

  • 先对数组中每个数的个位比大小排序
  • 然后按照队列先进先出的顺序分别拿出数据
  • 再将拿出的数据分别对十位百位千位等位数比较大小,直到数组中最大值排完位数就结束(如果数组中位数不一致时,就相当于在高位添加0)
  • 最后一位排序完的结果就是最终排序的顺序。

 

关于基数排序大家可以了解原理即可,下面采用的是二维数组实现基数排序: 

    public static void main(String[] args) {
        int[] arr = { 4, 3, 7, 4, 9, 2, 10,171 };
        sort(arr);
        System.out.println(Arrays.toString(arr));

    }
    public static void sort(int[] arr) {
        int max = arr[0];
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] > max) {
                max = arr[i];
            }
        }
        int maxLength = 0;
        int ret = max;
        while (ret != 0){
            ret /= 10;
            maxLength++;
        }

        int[][] cur = new int[10][arr.length-1];
        int[] elementCount = new int[10];

        int n = 1;
        for(int i=0; i<maxLength; i++) {
            //基数排序的核心是下面两个for循环
            for (int j = 0; j < arr.length; j++) {
                int len = arr[j]/n % 10;
                cur[len][elementCount[len]] = arr[j];
                elementCount[len]++;
            }
            int index = 0;
            for (int j = 0; j < elementCount.length; j++) {
                if (elementCount[j] != 0) {
                    for (int t = 0; t < elementCount[j]; t++) {
                        arr[index] = cur[j][t];
                        index++;
                    }
                }
                elementCount[j] = 0;
            }
            n=n*10;
        }
    }

计数排序

计数数组是通过计数进行存数据,最后打印数据。

  • 首先我们需要找出数组中最大最小值
  • 然后再创建一个最大值减最小值的差值个计数数组
  • 然后分别遍历原数组中每一个数值,每遍历一个计数数组相应位置加1,直至数组遍历完
  • 最后再将计数数组中的数一个一个赋值给原数组中,这样就结束了
public static void countSort(int[] arr){
    int min = arr[0];
    int max = arr[0];
    for (int i = 1; i < arr.length; i++){
        if (min > arr[i]){
            min = arr[i];
        }
        if (max < arr[i]){
            max = arr[i];
        }
    }
    int[] count = new int[max - min+1];
    for (int i = 0; i < arr.length; i++){
        count[arr[i] - min]++;
    }
    int n = 0;
    for (int i = 0; i < count.length; i++){
        while (count[i] != 0){
            arr[n] = i+min;
            n++;
            count[i]--;
        }
    }
}
public static void main(String[] args) {
    int[] arr = { 4, 3, 7, 4, 9, 2, 10,171 };
    countSort(arr);
    System.out.println(Arrays.toString(arr));

}

 当面临数组中比较稀疏的数值是,这个计数排序就会浪费很多空间,所以一般也不常使用这个排序,了解一下即可。

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

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

相关文章

机器学习-线性回归(对于f(x;w)=w^Tx+b理解)

一、&#x1d453;(&#x1d499;;&#x1d498;) &#x1d498;T&#x1d499;的推导 学习线性回归&#xff0c;我们那先要对于线性回归的表达公示&#xff0c;有所认识。 我们先假设空间是一组参数化的线性函数&#xff1a; 其中权重向量&#x1d498; ∈ R&#x1d437; …

Ubuntu环境通过Ollama部署DeepSeek-R1模型教程

Ollama 是一个专注于简化模型部署和推理的工具&#xff0c;特别适合在生产环境中快速部署和运行模型。 以下是如何使用 Ollama 来安装、部署和使用模型的步骤&#xff1a; 一. 安装 Ollama 首先&#xff0c;你需要安装 Ollama。Ollama 通常支持多种平台&#xff08;如 Linux、…

【中间件快速入门】什么是Redis

现在后端开发会用到各种中间件&#xff0c;一不留神项目可能在哪天就要用到一个我们之前可能听过但是从来没接触过的中间件&#xff0c;这个时候对于开发人员来说&#xff0c;如果你不知道这个中间件的设计逻辑和使用方法&#xff0c;那在后面的开发和维护工作中可能就会比较吃…

poi在word中打开本地文件

poi版本 5.2.0 方法1&#xff1a;使用XWPFFieldRun&#xff08;推荐&#xff09; 比如打开当前相对路径的aaaaa.docx XWPFFieldRun run paragraph.createFieldRun();CTRPr ctrPr run.getCTR().addNewRPr();CTFonts font ctrPr.addNewRFonts();// 设置字体font.setAscii(&quo…

Meta 计划 2025 年投资 650 亿美元推动 AI 发展

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

2025_1_27 C语言内存,递归,汉诺塔问题

1.c程序在内存中的布局 代码段&#xff08;Code Segment&#xff09; 位置&#xff1a;通常位于内存的最低地址。 用途&#xff1a;存储程序的可执行指令。 特点&#xff1a;只读&#xff0c;防止程序运行时被修改。数据段&#xff08;Data Segment&#xff09; 位置&#xf…

K8s运维管理平台 - xkube体验:功能较多

目录 简介Lic安装1、需要手动安装MySQL&#xff0c;**建库**2、启动命令3、[ERROR] GetNodeMetric Fail:the server is currently unable to handle the request (get nodes.metrics.k8s.io qfusion-1) 使用总结优点优化 补充1&#xff1a;layui、layuimini和beego的详细介绍1.…

舆情系统的情报搜索功能

引言 随着信息技术的发展和网络媒体的快速发展&#xff0c;舆情监测已成为各行各业不可或缺的工具。舆情系统中的情报搜索功能&#xff0c;作为其核心组成部分&#xff0c;能够帮助用户迅速、全面地捕捉互联网、社交平台、新闻媒体等渠道中的各类信息和舆论动态。情报搜索不仅提…

简易CPU设计入门:控制总线的剩余信号(二)

项目代码下载 请大家首先准备好本项目所用的源代码。如果已经下载了&#xff0c;那就不用重复下载了。如果还没有下载&#xff0c;那么&#xff0c;请大家点击下方链接&#xff0c;来了解下载本项目的CPU源代码的方法。 CSDN文章&#xff1a;下载本项目代码 上述链接为本项目…

[创业之路-270]:《向流程设计要效率》-2-企业流程架构模式 POS架构(规划、业务运营、支撑)、OES架构(业务运营、使能、支撑)

目录 一、POS架构 二、OES架构 三、POS架构与OES架构的差异 四、各自的典型示例 POS架构典型示例 OES架构典型示例 示例分析 五、各自的典型企业 POS架构典型企业 OES架构典型企业 分析 六、各自典型的流程 POS架构的典型流程 OES架构的典型流程 企业流程架构模式…

基于迁移学习的ResNet50模型实现石榴病害数据集多分类图片预测

完整源码项目包获取→点击文章末尾名片&#xff01; 番石榴病害数据集 背景描述 番石榴 &#xff08;Psidium guajava&#xff09; 是南亚的主要作物&#xff0c;尤其是在孟加拉国。它富含维生素 C 和纤维&#xff0c;支持区域经济和营养。不幸的是&#xff0c;番石榴生产受到降…

基于PostgreSQL的自然语义解析电子病历编程实践与探索(上)

一、引言 1.1研究目标与内容 本研究旨在构建一个基于 PostgreSQL 的自然语义解析电子病历编程体系,实现从电子病历文本中提取结构化信息,并将其存储于 PostgreSQL 数据库中,以支持高效的查询和分析。具体研究内容包括: 电子病历的预处理与自然语言处理:对电子病历文本进…

5.1.3 软件过程评估

文章目录 软件能力成熟度模型CMM能力成熟度模型集成 软件能力成熟度模型CMM 软件能力成熟度模型是用于评价软件承接方能力的方法&#xff0c;通过评价&#xff0c;也可以让承接方看到自身缺陷&#xff0c;不断改进和提升软件过程能力。分为5个成熟度等级&#xff0c;初始级、可…

【JavaEE】Spring(5):Mybatis(上)

一、什么是Mybatis Mybatis是一个持久层的框架&#xff0c;它用来更简单的完成程序和数据库之间的交互&#xff0c;也就是更简单的操作和读取数据库中的数据 在讲解Mybatis之前&#xff0c;先要进行一些准备工作&#xff1a; 1. 为项目添加 Mybatis 相关依赖 2. 创建用户表以…

记录 | MaxKB创建本地AI智能问答系统

目录 前言一、重建MaxKBStep1 复制路径Step2 删除MaxKBStep3 创建数据存储文件夹Step4 重建 二、创建知识库Step1 新建知识库Step2 下载测试所用的txtStep3 上传本地文档Step4 选择模型补充智谱的API Key如何获取 Step5 查看是否成功 三、创建应用Step1 新建应用Step2 配置AI助…

【Spring】Spring启示录

目录 前言 一、示例程序 二、OCP开闭原则 三、依赖倒置原则DIP 四、控制反转IOC 总结 前言 在软件开发的世界里&#xff0c;随着项目的增长和需求的变化&#xff0c;如何保持代码的灵活性、可维护性和扩展性成为了每个开发者必须面对的问题。传统的面向过程或基于类的设计…

八股——Java基础(四)

目录 一、泛型 1. Java中的泛型是什么 ? 2. 使用泛型的好处是什么? 3. Java泛型的原理是什么 ? 什么是类型擦除 ? 4.什么是泛型中的限定通配符和非限定通配符 ? 5. List和List 之间有什么区别 ? 6. 可以把List传递给一个接受List参数的方法吗&#xff1f; 7. Arra…

基于STM32的循迹小车设计与实现

1 系统方案设计 根据系统设计功能&#xff0c;展开基于STM32的循迹小车设计&#xff0c;整体设计框图如图2.1所示。系统采用STM32单片机作为控制器,通过L298驱动器控制两个直流电机实现对小车的运动控制&#xff0c;两路红外模块实现黑线的检测&#xff0c;HC-SR04超声波模块实…

AI刷题-蛋糕工厂产能规划、优质章节的连续选择

挑两个简单的写写 目录 一、蛋糕工厂产能规划 问题描述 输入格式 输出格式 解题思路&#xff1a; 问题理解 数据结构选择 算法步骤 关键点 最终代码&#xff1a; 运行结果&#xff1a;​编辑 二、优质章节的连续选择 问题描述 输入格式 输出格式 解题思路&a…

达梦拷贝DM_HOME的复制安装

近期一个项目需求&#xff0c;需要在没有安装包的情况下&#xff0c;将达梦数据库安装到虚机上&#xff08;生产机上安装了达梦&#xff09;&#xff0c;故采用直接打包生产机DM_HOME的方式拷贝至虚机&#xff0c;再依次执行达梦的部分指令完成安装。以下为验证的步骤&#xff…