参考文章

计数排序

定义

计数排序是一种特殊的桶排序

计数排序是一种非比较性质的排序算法,元素从未排序状态变为已排序状态的过程,是由额外控件的辅助和元素本身的值决定的。
计数排序过程中不存在元素之间的比较和交换操作。根据元素本身的值,将每个元素出现的次数记录到辅助空间后,通过对辅助空间内数据的计算,即可确定每一个元素最终的位置

稳定性

稳定

时间复杂度

O(N+K) K为数值范围

适用场合

计数排序需要占用大量空间,仅适用于数据比较集中的情况.

步骤

  1. 根据待排序集合中最大元素和最小元素的差值范围,申请额外空间
  2. 遍历待排序集合,将每一个元素出现的次数记录到元素值对应的额外空间内
  3. 对额外空间内数据进行计算,得出每一个元素的位置
  4. 将待排集合每一个元素移动到计算得出的正确位置上

代码

测试用例

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));}

运行结果

【算法】排序_计数排序相关推荐

  1. 排序算法:桶排序、计数排序、基数排序

    相关博客: 排序算法:冒泡排序.插入排序.选择排序.希尔排序 排序算法:归并排序.快速排序 排序算法:桶排序.计数排序.基数排序 排序算法:堆排序 十大排序算法小结 这篇博客将主要介绍三种时间复杂度是 ...

  2. 数据结构—排序算法总结(插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序、合并排序、计数排序)

    *排序 所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作. 稳定性 在待排序的数组中,如果出现多个相同的关键字,例如:98751555512,中出现重复的数字,在 ...

  3. js排序算法详解-计数排序

    全栈工程师开发手册 (作者:栾鹏) js系列教程5-数据结构和算法全解 js排序算法详解-计数排序 计数排序就是遍历数组记录数组下的元素出现过多次,然后把这个元素找个位置先安置下来,简单点说就是以原数 ...

  4. 【算法自由之路】前缀树 桶排序之计数排序和基数排序

    [算法自由之路]前缀树 & 桶排序之计数排序和基数排序 前缀树(字典树) 首先是前缀树,前缀树是由字符构成的树结构,它记录有多少前缀字符通过,以及有多少个同样的字符串,其找这类信息的时间复杂度 ...

  5. 八十五、再探希尔排序,桶排序,计数排序和基数排序

    @Author:Runsen 编程的本质来源于算法,而算法的本质来源于数学,编程只不过将数学题进行代码化. ---- Runsen 关于排序,其实还有很多,比如常见的希尔排序,桶排序,计数排序和基数排 ...

  6. python链表排序_链表排序+末尾各种排序

    #工具人排序 def nums_sort(data): if not data: return [] min_data = min(data) max_data = max(data) nums =  ...

  7. python经典排序_经典排序 python实现

    稳定的排序算法:冒泡排序.插入排序.归并排序和基数排序.不是稳定的排序算法:选择排序.快速排序.希尔排序.堆排序. 冒泡 defbobble(arr): length=len(arr)for i in ...

  8. c ++递归算法数的计数_计数排序算法–在C / C ++中实现的想法

    c ++递归算法数的计数 What is the counting sort algorithm? In Computer Science, sorting algorithms form the b ...

  9. python中用def实现自动排序_漫画排序算法Python实现

    冒泡排序 冒泡排序的思想,我们要把相邻的元素两两比较,当一个元素大于右侧相邻元素时, 交换它们的位置;当一个元素小于或等于右侧相邻元素时,位置不变. def bubbleSort(list): ran ...

  10. 排序算法--(冒泡排序,插入排序,选择排序,归并排序,快速排序,桶排序,计数排序,基数排序)

    一.时间复杂度分析 - **时间复杂度**:对排序数据的总的操作次数.反应当n变化时,操作次数呈现什么规律 - **空间复杂度**:算法在计算机内执行时所需要的存储空间的容量,它也是数据规模n的函数. ...

最新文章

  1. [20180817]校内模拟赛
  2. JavaScript-面向对象详解
  3. mongodb数据库常用指令
  4. python亿级mysql数据库导出_Python之csv文件从MySQL数据库导入导出的方法
  5. quatus ii 常见错误及其改正方法
  6. 【整理分享1】PHP中exit()与die()的区别
  7. 抖音代码舞Python制作
  8. word批量转PDF
  9. 学习通考试刷题(ocs网课助手)
  10. 《Python编程初学者指南》 道森中文版附源代码
  11. 群晖NAS搭建portainer
  12. DNA序列 UVa1368
  13. 组策略应用之一——软件分发
  14. 手把手教你使用Pygame制作飞机大战小游戏,4万字超详细讲解!
  15. 清零实验,拆字实验,8255并行口实验(硬件),继电器控制实验(硬件)
  16. spring boot火车订票系统 毕业设计源码031012
  17. 653 Android 8,传高通骁龙653八核处理器曝光:Adreno515 GPU
  18. 计算机大题知识点总结,计算机二级office操作题考点大总结!
  19. Unity-地形编辑器-编辑器拓展功能类
  20. 一种TPMS胎压传感器工作模式介绍--汽车胎压监测方案

热门文章

  1. SQLite的查询优化
  2. 机器学习 --- 4. 大内密探HMM(隐马尔可夫)围捕赌场老千(转)
  3. 【故障分析】基于matlab ICA故障监测【含Matlab源码 1591期】
  4. 【TSP】基于matlab自重启伪遗传改良算法求解旅行商问题【含Matlab源码 1510期】
  5. 【优化覆盖】基于matlab虚拟力算法求解无线网络传感覆盖优化问题【含Matlab源码 1187期】
  6. 【二维码识别】基于matlab GUI 灰度+二值化+校正二维码生成与识别【含Matlab源码 635期】
  7. 【图像隐写】基于matlab高斯模型JPEG图像隐写【含Matlab源码 367期】
  8. 【带钢厚度预测】基于matlab GUI SVM带钢厚度预测【含Matlab源码 173期】
  9. 【TSP】基于matlab遗传算法求解30城市旅行商问题【含Matlab源码 135期】
  10. php-openssl降级,openssl升级降级