【算法】排序_计数排序
参考文章
计数排序
定义
计数排序是一种特殊的桶排序
计数排序是一种非比较性质的排序算法,元素从未排序状态变为已排序状态的过程,是由额外控件的辅助和元素本身的值决定的。
计数排序过程中不存在元素之间的比较和交换操作。根据元素本身的值,将每个元素出现的次数记录到辅助空间后,通过对辅助空间内数据的计算,即可确定每一个元素最终的位置
稳定性
稳定
时间复杂度
O(N+K) K为数值范围
适用场合
计数排序需要占用大量空间,仅适用于数据比较集中的情况.
步骤
- 根据待排序集合中最大元素和最小元素的差值范围,申请额外空间
- 遍历待排序集合,将每一个元素出现的次数记录到元素值对应的额外空间内
- 对额外空间内数据进行计算,得出每一个元素的位置
- 将待排集合每一个元素移动到计算得出的正确位置上
代码
测试用例
int arr[] = {37,18,21,21,49,0,25,6,14};
原代码
/*** 计数排序* @param arr* @param len*/public static void countSort1(int[] arr,int len){// 求取最大值最小值,确定桶区间范围// 记录数组中的最大值int max = Integer.MIN_VALUE;// 记录数组中的最小值int min = Integer.MAX_VALUE;for (int i = 0;i<len;i++){max = Math.max(max,arr[i]);min = Math.min(min,arr[i]);}System.out.println("最大值:"+max);System.out.println("最小值:"+min);// 长度为max的话,min如果是负数或者0的时候,下面的help[mapPos]会越界
// int help[] = new int[max];// 辅助数组int help[] = new int[max-min+1];// 找出每个数字出现的次数for (int i = 0;i<len;i++){int mapPos = arr[i] - min;help[mapPos]++;}int index = 0;for (int i = 0;i<help.length;i++){while (help[i]-->0){arr[index++] = i+min;}}System.out.println("排序结果:"+ Arrays.toString(arr));}
运行结果
【算法】排序_计数排序相关推荐
- 排序算法:桶排序、计数排序、基数排序
相关博客: 排序算法:冒泡排序.插入排序.选择排序.希尔排序 排序算法:归并排序.快速排序 排序算法:桶排序.计数排序.基数排序 排序算法:堆排序 十大排序算法小结 这篇博客将主要介绍三种时间复杂度是 ...
- 数据结构—排序算法总结(插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序、合并排序、计数排序)
*排序 所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作. 稳定性 在待排序的数组中,如果出现多个相同的关键字,例如:98751555512,中出现重复的数字,在 ...
- js排序算法详解-计数排序
全栈工程师开发手册 (作者:栾鹏) js系列教程5-数据结构和算法全解 js排序算法详解-计数排序 计数排序就是遍历数组记录数组下的元素出现过多次,然后把这个元素找个位置先安置下来,简单点说就是以原数 ...
- 【算法自由之路】前缀树 桶排序之计数排序和基数排序
[算法自由之路]前缀树 & 桶排序之计数排序和基数排序 前缀树(字典树) 首先是前缀树,前缀树是由字符构成的树结构,它记录有多少前缀字符通过,以及有多少个同样的字符串,其找这类信息的时间复杂度 ...
- 八十五、再探希尔排序,桶排序,计数排序和基数排序
@Author:Runsen 编程的本质来源于算法,而算法的本质来源于数学,编程只不过将数学题进行代码化. ---- Runsen 关于排序,其实还有很多,比如常见的希尔排序,桶排序,计数排序和基数排 ...
- python链表排序_链表排序+末尾各种排序
#工具人排序 def nums_sort(data): if not data: return [] min_data = min(data) max_data = max(data) nums = ...
- python经典排序_经典排序 python实现
稳定的排序算法:冒泡排序.插入排序.归并排序和基数排序.不是稳定的排序算法:选择排序.快速排序.希尔排序.堆排序. 冒泡 defbobble(arr): length=len(arr)for i in ...
- c ++递归算法数的计数_计数排序算法–在C / C ++中实现的想法
c ++递归算法数的计数 What is the counting sort algorithm? In Computer Science, sorting algorithms form the b ...
- python中用def实现自动排序_漫画排序算法Python实现
冒泡排序 冒泡排序的思想,我们要把相邻的元素两两比较,当一个元素大于右侧相邻元素时, 交换它们的位置;当一个元素小于或等于右侧相邻元素时,位置不变. def bubbleSort(list): ran ...
- 排序算法--(冒泡排序,插入排序,选择排序,归并排序,快速排序,桶排序,计数排序,基数排序)
一.时间复杂度分析 - **时间复杂度**:对排序数据的总的操作次数.反应当n变化时,操作次数呈现什么规律 - **空间复杂度**:算法在计算机内执行时所需要的存储空间的容量,它也是数据规模n的函数. ...
最新文章
- [20180817]校内模拟赛
- JavaScript-面向对象详解
- mongodb数据库常用指令
- python亿级mysql数据库导出_Python之csv文件从MySQL数据库导入导出的方法
- quatus ii 常见错误及其改正方法
- 【整理分享1】PHP中exit()与die()的区别
- 抖音代码舞Python制作
- word批量转PDF
- 学习通考试刷题(ocs网课助手)
- 《Python编程初学者指南》 道森中文版附源代码
- 群晖NAS搭建portainer
- DNA序列 UVa1368
- 组策略应用之一——软件分发
- 手把手教你使用Pygame制作飞机大战小游戏,4万字超详细讲解!
- 清零实验,拆字实验,8255并行口实验(硬件),继电器控制实验(硬件)
- spring boot火车订票系统 毕业设计源码031012
- 653 Android 8,传高通骁龙653八核处理器曝光:Adreno515 GPU
- 计算机大题知识点总结,计算机二级office操作题考点大总结!
- Unity-地形编辑器-编辑器拓展功能类
- 一种TPMS胎压传感器工作模式介绍--汽车胎压监测方案
热门文章
- SQLite的查询优化
- 机器学习 --- 4. 大内密探HMM(隐马尔可夫)围捕赌场老千(转)
- 【故障分析】基于matlab ICA故障监测【含Matlab源码 1591期】
- 【TSP】基于matlab自重启伪遗传改良算法求解旅行商问题【含Matlab源码 1510期】
- 【优化覆盖】基于matlab虚拟力算法求解无线网络传感覆盖优化问题【含Matlab源码 1187期】
- 【二维码识别】基于matlab GUI 灰度+二值化+校正二维码生成与识别【含Matlab源码 635期】
- 【图像隐写】基于matlab高斯模型JPEG图像隐写【含Matlab源码 367期】
- 【带钢厚度预测】基于matlab GUI SVM带钢厚度预测【含Matlab源码 173期】
- 【TSP】基于matlab遗传算法求解30城市旅行商问题【含Matlab源码 135期】
- php-openssl降级,openssl升级降级