
排序算法——计数排序
确定最大值和最小值:首先遍历整个数组,找到最大值 创建计数数组:创建一个长度为 统计频率:再次遍历原数组,对于每个数值 填充结果:通过遍历
发布日期:2021-05-10 11:30:56
浏览次数:20
分类:精选文章
本文共 1468 字,大约阅读时间需要 4 分钟。
计数排序是一种非基于比较的快速排序算法,尤其适用于处理整数值排序任务。本文将深入分析该算法的工作原理、时间复杂度、空间复杂度以及优缺点,并提供一个基本的代码实现。
1. 算法原理
计数排序的核心思想基于元素的计数和计数值的累加。具体步骤如下:
max
和最小值 min
。max - min + 1
的数组 countAry
,用以存储每个数值出现的次数。i
,将其计数值存入 countAry[i - min]
。countAry
,将数值 min + j
操作 countAry[j]
次填充到原数组中,其中 j
从 0
到 k - 1
(k = max - min + 1
)。2. 复杂度分析
时间复杂度:
计数排序的时间复杂度为O(n + k)
, 其中 k
是值的范围大小。由于我们只需遍历数组两次(一次找出 min
和 max
,另一次统计频率),时间复杂度显著优于传统的比较排序算法(如归并排序)对数时间复杂度 O(n log n)
的优势。 空间复杂度:
空间复杂度为O(k)
,主要用于存储计数数组。这种空间换时间的策略在处理整数范围较小时尤为有效。 优点:
与传统比较排序相比,计数排序省时省力,尤其在数据范围较小时表现尤为突出。 缺点: 当数据范围较大时,空间复杂度O(k)
可能会超过带有 O(n log n)
时间复杂度的传统算法的性能优势。 3. 稳定性
计数排序是一种稳定的排序算法。由于算法的执行过程中不改变数据的相对顺序,句场中的原数据与排序后数据的相对顺序完全一致。
4. 代码实现
以下是一个实现计数排序的简单代码示例:
public class CountSort { public static void countSort(int[] array) { int min = array[0]; int max = array[0]; for (int num : array) { if (num < min) { min = num; } if (num > max) { max = num; } } int k = max - min + 1; int[] countAry = new int[k]; for (int num : array) { countAry[num - min]++; } int i = 0; for (int j = 0; j < k; j++) { while (countAry[j] > 0) { array[i++] = j + min; countAry[j]--; } } }}
总结
计数排序通过巧妙地利用计数信息,实现了对整数值排序的高效处理。虽然其空间复杂度较高,但在数据范围控制得当时,能够显著提升排序效率。
发表评论
最新留言
感谢大佬
[***.8.128.20]2025年04月24日 15时26分48秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
python中列表 元组 字典 集合的区别
2019-03-07
python struct 官方文档
2019-03-07
Android DEX加固方案与原理
2019-03-07
Android Retrofit2.0 上传单张图片和多张图片
2019-03-07
iOS_Runtime3_动态添加方法
2019-03-07
Leetcode第557题---翻转字符串中的单词
2019-03-07
Problem G. The Stones Game【取石子博弈 & 思维】
2019-03-07
Unable to execute dex: Multiple dex files
2019-03-07
Java多线程
2019-03-07
Unity监听日记
2019-03-07
AndroidStudio跳到错误位置
2019-03-07
木马开发的基本理论基础(五)
2019-03-07
openssl服务器证书操作
2019-03-07
expect 模拟交互 ftp 上传文件到指定目录下
2019-03-07
linux系统下双屏显示
2019-03-07
PDF.js —— vue项目中使用pdf.js显示pdf文件(流)
2019-03-07
我用wxPython搭建GUI量化系统之最小架构的运行
2019-03-07
我用wxPython搭建GUI量化系统之多只股票走势对比界面
2019-03-07
我用wxPython搭建GUI量化系统之财务选股工具添加日历和排序
2019-03-07