计数排序(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-计数排序(附带动画演示程序)相关推荐

  1. C#算法设计排序篇之04-选择排序(附带动画演示程序)

    选择排序(Selection Sort) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/681 访问. 选择排序是一种简 ...

  2. 算法设计与分析——十大经典排序算法二(6--10)

    一个不知名大学生,江湖人称菜狗 original author: jacky Li Email : 3435673055@qq.com  Time of completion:2023.3.1 Las ...

  3. 算法导论-排序(四)计数排序(线性时间排序)

    目录 1.计数排序介绍 2.流程图 3.代码实现 4.性能分析 5.参考资料 内容 1.计数排序介绍 什么是计数排序? 计数排序是一种特殊的排序算法,之前介绍的排序算法需要对数进行两两比较,效率下界为 ...

  4. 算法设计与分析——十大经典排序算法一(1--5)

    目录 算法设计与分析--十大经典排序算法 第1关:冒泡排序 参考代码 第2关:选择排序 参考代码 第3关:插入排序 参考代码 第4关:希尔排序 参考代码 第5关:归并排序 参考代码 作者有言 一个不知 ...

  5. 【算法设计与分析】08 序列求和的方法

    本篇文章学习数列求和的一些方法.这些方法对后面学习算法的时间复杂度非常有帮助. 文章目录 1. 数列求和公式 1.1 二分搜索的时间复杂度求解 2 估计和式上届的放大法 3 估计和式渐近的界 4 总结 ...

  6. 算法导论5:基数排序和计数排序 2016.1.5

    今天的这个比较神奇,是一个线性复杂度的排序算法O(n),算法导论在这一部分先证明了比较排序的复杂度下界是nlgn,所以基数排序不是基于比较的排序. 其实这种比较方法我们应该都接触过.假设输入的数都是三 ...

  7. 算法设计和数据结构学习_2(常见排序算法思想)

    一般约定我们是按照从小到大的顺序排序. 按照向量的形式来参考排序中数组元素的相对位置,行向量中最左边为数组的第一个元素,且称为前面.列向量中最上面的元素为数组的第一个元素,也是称为前边. 对常见的排序 ...

  8. 算法导论第八章__实现计数排序

    计数排序:不须要比較就能得出排序的顺序__比如.本章的计数排序.基数排序.桶排序 比較排序:须要进行比較才干得出排序的顺序__比如,本章的堆排序.高速排序(本质是插入排序).插入排序 代码清单:计数排 ...

  9. 【经典算法学习-排序篇】直接选择排序

    一.选择排序 1.基本概念和介绍 选择排序的核心思想是:每一趟从无序区中选出关键字最小(或最大)的元素,按顺序放在有序区的最后(生成新的有序区,无序区元素个数减1),直到全部排完为止. 换句话说就是: ...

最新文章

  1. linux下的各种系统错误errno描述一览
  2. 分享php中四种webservice实现的简单架构方法及实例(转)
  3. MFC子线程访问主线程对话框程序的控件对象
  4. 反应器组件 ACE_Reactor
  5. 数据库练习(二)三个数据库根据指定id获取name和存储数据库名称
  6. 中消协发布疫情期间消费维权热点:口罩类投诉最多
  7. 睿停车系统车场服务器,睿停车后台管理中心系统-用户手册-前台版本
  8. 【操作系统】第3章 进程管理与调度
  9. spark python教程_spark2.x由浅入深深到底系列七之python开发spark环境配置
  10. Android Studio 使用Method trace,查看某进程的所有线程trace的方法
  11. PMP-36项目风险管理
  12. 【小笔记】大数据量excel解析工具性能对比
  13. 编程过程中常见几何数学公式汇总
  14. 【句库】英语论文写作之好词好句积累
  15. 发布地图服务时导入已有的tpk切片包作为缓存
  16. c#语言小括号里面的逗号是什么意思
  17. VSCode Conventional Commits 插件
  18. enumerate() 函数的解释
  19. 内存读数据和磁盘读数据的区别
  20. 容器编排工具—Kubernetes

热门文章

  1. 【latex】最后一页 参考文献不平衡 左右不对齐
  2. 资源 ACCP-S1 BOOK3开发工具的下载
  3. 输出语句 WriteLine 与格式化输出 1006 c#
  4. SQL Server全局禁用及打开指定的跟踪标记
  5. 新版 Edge 浏览器 Logo 曝光:形状相同,但为黄色背景
  6. Flash动画中按钮的八个动作
  7. Confluence 6 CSS 指南:修改顶部背景
  8. MATLAB的PLOT函数线型设置及横坐标为字符串的代码实例
  9. 开源搜索引擎solr4.0+tomcat7实现中文分词
  10. C#中静态构造函数的一些理解