C#算法设计排序篇之08-计数排序(附带动画演示程序)
计数排序(Counting Sort)
该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/689 访问。
计数排序是一个非基于比较的排序算法,该算法于1954年由 Harold H. Seward 提出。它的优势在于在对一定范围内的整数排序时,它的时间复杂度为线性的O(n+k)(其中k是整数的范围,即max - min + 1),快于任何比较排序算法,这是一种典型的空间换时间的算法。
示例:
public class Program {public static void Main(string[] args) {int[] array = { 43, 69, 11, 72, 28, 21, 56, 80, 48, 94, 32, 8 };CountingSort(array);ShowSord(array);Console.ReadKey();}private static void ShowSord(int[] array) {foreach (var num in array) {Console.Write($"{num} ");}Console.WriteLine();}public static void CountingSort(int[] array) {if (array.Length == 0) return;int min = array[0];int max = min;foreach (int number in array) {if (number > max) {max = number;}else if (number < min) {min = number;}}int[] counting = new int[max - min + 1];for (int i = 0; i < array.Length; i++) {counting[array[i] - min] += 1;}int index = -1;for (int i = 0; i < counting.Length; i++) {for (int j = 0; j < counting[i]; j++) {index++;array[index] = i + min;}}}}
以上是计数排序算法的一种实现,以下是这个案例的输出结果:
该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/689 访问。
8 11 21 28 32 43 48 56 69 72 80 94
分析:
计数排序算法的时间复杂度为: ,即其时间复杂度是线性的。
AlgorithmMan:
AlgorithmMan by Iori,AlgorithmMan是使用C#开发的一套用于算法演示的工具。
下载链接:AlgorithmMan-CountingSort
C#算法设计排序篇之08-计数排序(附带动画演示程序)相关推荐
- C#算法设计排序篇之04-选择排序(附带动画演示程序)
选择排序(Selection Sort) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/681 访问. 选择排序是一种简 ...
- 算法设计与分析——十大经典排序算法二(6--10)
一个不知名大学生,江湖人称菜狗 original author: jacky Li Email : 3435673055@qq.com Time of completion:2023.3.1 Las ...
- 算法导论-排序(四)计数排序(线性时间排序)
目录 1.计数排序介绍 2.流程图 3.代码实现 4.性能分析 5.参考资料 内容 1.计数排序介绍 什么是计数排序? 计数排序是一种特殊的排序算法,之前介绍的排序算法需要对数进行两两比较,效率下界为 ...
- 算法设计与分析——十大经典排序算法一(1--5)
目录 算法设计与分析--十大经典排序算法 第1关:冒泡排序 参考代码 第2关:选择排序 参考代码 第3关:插入排序 参考代码 第4关:希尔排序 参考代码 第5关:归并排序 参考代码 作者有言 一个不知 ...
- 【算法设计与分析】08 序列求和的方法
本篇文章学习数列求和的一些方法.这些方法对后面学习算法的时间复杂度非常有帮助. 文章目录 1. 数列求和公式 1.1 二分搜索的时间复杂度求解 2 估计和式上届的放大法 3 估计和式渐近的界 4 总结 ...
- 算法导论5:基数排序和计数排序 2016.1.5
今天的这个比较神奇,是一个线性复杂度的排序算法O(n),算法导论在这一部分先证明了比较排序的复杂度下界是nlgn,所以基数排序不是基于比较的排序. 其实这种比较方法我们应该都接触过.假设输入的数都是三 ...
- 算法设计和数据结构学习_2(常见排序算法思想)
一般约定我们是按照从小到大的顺序排序. 按照向量的形式来参考排序中数组元素的相对位置,行向量中最左边为数组的第一个元素,且称为前面.列向量中最上面的元素为数组的第一个元素,也是称为前边. 对常见的排序 ...
- 算法导论第八章__实现计数排序
计数排序:不须要比較就能得出排序的顺序__比如.本章的计数排序.基数排序.桶排序 比較排序:须要进行比較才干得出排序的顺序__比如,本章的堆排序.高速排序(本质是插入排序).插入排序 代码清单:计数排 ...
- 【经典算法学习-排序篇】直接选择排序
一.选择排序 1.基本概念和介绍 选择排序的核心思想是:每一趟从无序区中选出关键字最小(或最大)的元素,按顺序放在有序区的最后(生成新的有序区,无序区元素个数减1),直到全部排完为止. 换句话说就是: ...
最新文章
- linux下的各种系统错误errno描述一览
- 分享php中四种webservice实现的简单架构方法及实例(转)
- MFC子线程访问主线程对话框程序的控件对象
- 反应器组件 ACE_Reactor
- 数据库练习(二)三个数据库根据指定id获取name和存储数据库名称
- 中消协发布疫情期间消费维权热点:口罩类投诉最多
- 睿停车系统车场服务器,睿停车后台管理中心系统-用户手册-前台版本
- 【操作系统】第3章 进程管理与调度
- spark python教程_spark2.x由浅入深深到底系列七之python开发spark环境配置
- Android Studio 使用Method trace,查看某进程的所有线程trace的方法
- PMP-36项目风险管理
- 【小笔记】大数据量excel解析工具性能对比
- 编程过程中常见几何数学公式汇总
- 【句库】英语论文写作之好词好句积累
- 发布地图服务时导入已有的tpk切片包作为缓存
- c#语言小括号里面的逗号是什么意思
- VSCode Conventional Commits 插件
- enumerate() 函数的解释
- 内存读数据和磁盘读数据的区别
- 容器编排工具—Kubernetes