八、C#计数排序算法

简介

计数排序是一种非比较性的排序算法,适用于排序一定范围内的整数。它的基本思想是通过统计每个元素的出现次数,然后根据元素的大小依次输出排序结果。

实现原理

  1. 首先找出待排序数组中的最大值max和最小值min。

  2. 创建一个长度为max-min+1的数组count,用于统计每个元素出现的次数。

  3. 遍历待排序数组,将每个元素的出现次数记录在count数组中。

  4. 根据count数组和min值,得到每个元素在排序结果中的起始位置。

  5. 创建一个与待排序数组长度相同的临时数组temp,用于存储排序结果。

  6. 再次遍历待排序数组,根据count数组和min值确定每个元素在temp数组中的位置,并将其放入。

  7. 将temp数组中的元素复制回待排序数组,排序完成。

代码实现

 public static void CountingSort(int[] array)
        {
            int arrayLength = array.Length;
            if (arrayLength <= 1) return;

            int min = array[0];
            int max = array[0];

            //找出最大值和最小值
            for (int i = 1; i < arrayLength; i++)
            {
                if (array[i] < min) min = array[i];
                if (array[i] > max) max = array[i];
            }

            //统计每个元素出现的次数
            int[] count = new int[max - min + 1];

            //统计每个元素出现的次数
            for (int i = 0; i < arrayLength; i++)
            {
                count[array[i] - min]++;
            }

            //根据count数组和min值确定每个元素的起始位置
            for (int i = 1; i < count.Length; i++)
            {
                count[i] += count[i - 1];
            }

            //存储排序结果
            int[] temp = new int[arrayLength];

            //根据count数组和min值确定每个元素在temp数组中的位置
            for (int i = arrayLength - 1; i >= 0; i--)
            {
                int index = count[array[i] - min] - 1;
                temp[index] = array[i];
                count[array[i] - min]--;
            }

            //将排序结果复制回原数组
            for (int i = 0; i < arrayLength; i++)
            {
                array[i] = temp[i];
            }
        }

        public static void CountingSortRun()
        {
            int[] array = { 19, 27, 46, 48, 50, 2, 4, 44, 47, 36, 38, 15, 26, 5, 3, 99, 888, 0, -1 };
            Console.WriteLine("排序前数组:" + string.Join(", ", array));

            CountingSort(array);

            Console.WriteLine("排序后数组:" + string.Join(", ", array));
        }

运行结果

总结

计数排序的时间复杂度为O(n+k),其中n为待排序数组的长度,k为最大值和最小值之差。计数排序的优势在于对范围较小的整数排序时,速度较快且稳定,但受限于需要统计每个元素的出现次数,不适用于范围过大或包含负数的情况。

C#十大排序总结-CSDN博客

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据结构->手把手教入门栈与列队(基础)

✅作者简介&#xff1a;大家好&#xff0c;我是橘橙黄又青&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;橘橙黄又青-CSDN博客 1.什么是栈 1.1栈的概念及结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许…

SpringBoot 邮件服务集成配置全面解析

前言 本文以网易邮箱&#xff08;及 163 邮箱&#xff09;为例&#xff0c;展示如何为 SpringBoot 项目集成邮件服务&#xff0c;其他邮箱配置类似&#xff0c;可以自行查看 Spring Email 指南 或是其他官方文档 授权码 首先我们需要获取授权码&#xff0c;用于后续配置&…

[MAUI]集成高德地图组件至.NET MAUI Blazor项目

文章目录 前期准备&#xff1a;注册高德开发者并创建 key登录控制台创建 key获取 key 和密钥 创建项目创建JS API Loader配置权限创建定义创建模型创建地图组件创建交互逻辑 项目地址 地图组件在手机App中常用地理相关业务&#xff0c;如查看线下门店&#xff0c;设置导航&…

Linux进程的管理和进程的状态

进程的基本概念&#xff1a; 程序的一个执行实例 &#xff0c;正在执行的程序等等 ——— 课本概念 担当分配系统资源的实体&#xff0c;例如cpu时间&#xff0c;内存 -----内核的观点 一、进程的管理 processbar 存储在磁盘中的可执行文件 可执行文件在启动/运行的同时&…

2024阿里云域名优惠口令大全_你要的【优惠口令】都在这!

2024年阿里云域名优惠口令&#xff0c;com域名续费优惠口令“com批量注册更享优惠”&#xff0c;cn域名续费优惠口令“cn注册多个价格更优”&#xff0c;cn域名注册优惠口令“互联网上的中国标识”&#xff0c;阿里云优惠口令是域名专属的优惠码&#xff0c;可用于域名注册、续…

解决修改数据后,前端页面不显示问题

如图&#xff0c;修改数据后&#xff0c;在前端页面不显示的问题&#xff0c;可能是因为缓存问题 解决方案 以为Edge浏览器为例 打开设置左边栏点击隐私&#xff0c;搜索和服务选择清除 Internet Explorer 的浏览数据点击删除&#xff0c;重新启动前端界面即可。

2024年阿里云服务器优惠价格表_一张表清晰明了

2024年腾讯云服务器优惠价格表&#xff0c;一张表整理阿里云服务器最新报价&#xff0c;阿里云服务器网整理云服务器ECS和轻量应用服务器详细CPU内存、公网带宽和系统盘详细配置报价单&#xff0c;大家也可以直接移步到阿里云CLUB中心查看 aliyun.club 当前最新的云服务器优惠券…

python--循环(作业)

作业一&#xff1a; 判断一个数是否为质数&#xff08;素数&#xff09; flag True prime int(input("请输入一个整数&#xff1a;")) for num in range(2, prime):if prime % num 0:flag Falsebreak if flag:print("它是质数") else:print("它…

01.绝对路径和相对路径(Linux基本概念)

基础认知&#xff1a; 电脑的目录结构是一颗多叉树。不管是Linux还是windows&#xff0c;目录结构都是一样的。所以我们在查找某个目录或者文件的时候&#xff0c;本质就是在多叉树结点的查找。多叉树示例图如下&#xff1a; ​​​​​​​ ​​​​​​​ ​​…

指尖论文怎么用 #经验分享#学习方法

指尖论文是一款优秀的论文写作、查重降重工具&#xff0c;被广泛认可为高效、可靠、方便的辅助工具。那么&#xff0c;如何正确地使用指尖论文呢&#xff1f; 首先&#xff0c;用户需要注册一个指尖论文的账号&#xff0c;并登录到平台上。注册过程非常简单&#xff0c;只需要输…

总结: HQL语句

总结: HQL语句 Part1 数据库的操作Part2 数据表的操作1. 创建普通表2. 内外部表3. 内外部表转换 Part1 数据库的操作 查看数据库: show databases; 创建数据库: create database if not exists 数据库名 使用数据库: use 数据库名; 查看数据库详细信息: desc database 数据库名…

java数据结构与算法基础-----字符串------正则表达式的练习案例---持续补充中

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 正则表达式基础&#xff1a;https://blog.csdn.net/grd_java/article/det…

springboot297毕业生实习与就业管理系统的设计与实现

毕业生实习与就业管理系统 摘 要 使用旧方法对毕业生实习与就业管理系统的信息进行系统化管理已经不再让人们信赖了&#xff0c;把现在的网络信息技术运用在毕业生实习与就业管理系统的管理上面可以解决许多信息管理上面的难题&#xff0c;比如处理数据时间很长&#xff0c;数…

升级 HarmonyOS 4 版本,腕上智慧更进一步

HUAWEI WATCH GT 3 系列升级 HarmonyOS 4 新版本后&#xff0c;手表体验更进一步&#xff0c;快来看看有哪些变化吧~

Linux Sftp和Scp

scp 和 sftp 区别 1 scp 能将远程文件复制到另一个远程机&#xff0c;sftp 不能。sftp为 SSH的其中一部分&#xff0c;是一种传输档案至 Blogger 伺服器的安全方式 2.scp 没有删除/创建远程目录功能&#xff0c;sftp 有。scp 在需要进行验证时会要求你输入密码或口令。 3. FT…

docker 的八大技术架构(图解)

docker 的八大技术架构 单机架构 概念&#xff1a; 应用服务和数据库服务公用一台服务器 出现背景&#xff1a; 出现在互联网早期&#xff0c;访问量比较小&#xff0c;单机足以满足需求 架构优缺点&#xff1a; 优点&#xff1a;部署简单&#xff0c;成本低 缺点&#xff1…

ChatGPT不再只是聊天工具!揭秘10种令你大开眼界的新玩法!

随着生活步伐的加速&#xff0c;大家都在寻求效率和便利。在此背景下&#xff0c;人工智能成了许多人的备受关注和热用的技术。如今&#xff0c;自然语言处理模型ChatGPT逐渐在助力众多人士提升工作效率和生活品质。还不知道如何使用ChatGPT的话&#xff0c;不妨读下这篇介绍。…

阅读笔记(ICIP2023)Rectangular-Output Image Stitching

“矩形输出”图像拼接 Zhou, H., Zhu, Y., Lv, X., Liu, Q., & Zhang, S. (2023, October). Rectangular-Output Image Stitching. In 2023 IEEE International Conference on Image Processing (ICIP) (pp. 2800-2804). IEEE. 0. 摘要 图像拼接的目的是将两幅视场重叠的…

代码随想录day28(2)二叉树:删除二叉搜索树中的节点(leetcode450)

题目要求&#xff1a;给定一个二叉搜索树的根节点 root 和一个值 key&#xff0c;删除二叉搜索树中的 key 对应的节点&#xff0c;并保证二叉搜索树的性质不变。返回二叉搜索树&#xff08;有可能被更新&#xff09;的根节点的引用。 思路&#xff1a;首先要删除二叉搜索树中的…

CycleGAN-Turbo:CycleGAN结合扩散模型,一步图像到图像转换方法

CycleGAN-Turbo&#xff1a;CycleGAN结合扩散模型&#xff0c;一步图像到图像转换方法 提出背景子解法1&#xff1a;直接对条件信息进行编码子解法2&#xff1a;整合三个独立模块子解法3&#xff1a;保留高频细节 相关工作例子&#xff1a;日转夜图像转换现有方法我们的方法&am…