1、算法流程

(1)求取待排序数组A的最大值max;

(2)创建一个新的数组C[max+1],用于统计数组A中的每个元素a,小于等于a的个数。

(3)根据小于等于a的个数,来确定排序后,a在排序数组中的位置,进行位置填充;

2、代码实现

写代码需要注意事项:

(1)计数统计结束后,我们根据C[a]的大小填充元素a,每填充一次C[a]要减去1,这样是为了保证重复数据可以正常填充;

(2)填充如果是要稳定排序,那么需要使用反向填充的方案;

int * count_sort(int *data,int length)
{int max=data[0];for (int i = 1; i <length ; ++i) {if(max<data[i])max=data[i];}//统计每个数值计数int *count=new int[max+1]();for (int i = 0; i<length ; ++i) {count[data[i]]++;}//从左往右,统计小于data[i]的数值个数for (int i = 1; i <=max ; ++i) {count[i]+=count[i-1];}int *sort_data=new int[length]();for (int i = 0; i<length; ++i) {//不稳定排序,因为相等的数值,位置会调换,如果要实现稳定排序,那么就需要反向填充,用i--的方式循环sort_data[count[data[i]]-1]=data[i];//这边需要注意索引值等于:个数-1count[data[i]]--;//重复数据问题,每填充一次,索引值就要往前移位}delete[] count;return sort_data;
}int test_sort() {int data[10]={5,1,6,7,8,4,2,2,10,13};//非比较排序算法int * sort_data=count_sort(data,10);for(int i=0;i<10;i++){std::cout<<sort_data[i]<<std::endl;}delete[]sort_data;return 0;
}

数据结构(九)计数排序相关推荐

  1. 【恋上数据结构】计数排序

    计数排序 前言 计数排序-简单实现 实现步骤 代码实现与缺点 计数排序 – 改进 改进-图解 改进-实现 复杂度与稳定性 计数排序-对自定义对象进行排序 经典的十大排序算法! 前言 请务必看一下这个: ...

  2. 计数排序及其改进 C++代码实现与分析 恋上数据结构笔记

    文章目录 复习梗概 算法思想 基础思想 改进空间复杂度,改进不能对负数进行排序问题 改进稳定性 计数排序时间空间复杂度 计数排序基础版 代码及输出 计数排序第一次改进版 代码及输出 计数排序终极版 代 ...

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

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

  4. 算法与数据结构07:前缀树,计数排序与桶排序

    算法与数据结构07:前缀树,计数排序与桶排序 前缀树 计数排序 桶排序 前缀树 Trie 1.根据字符串数组中,每个字符串的字符作为路径,组成而成的一个多叉树结构 2.每个节点都有一个paths数组, ...

  5. 数据结构与算法 | 计数排序

    之前的几篇讲解了所有常用的比较排序,这次就来讲一讲非比较排序的计数排序. 计数排序又称为鸽巢原理,是对哈希直接定址法的变形应用.和其他排序不一样,计数排序并不是通过比较元素的大小来实现的,而是通过统计 ...

  6. Hark的数据结构与算法练习之计数排序

    算法说明 计数排序属于线性排序,它的时间复杂度远远大于常用的比较排序.(计数是O(n),而比较排序不会超过O(nlog2nJ)). 其实计数排序大部分很好理解的,唯一理解起来很蛋疼的是为了保证算法稳定 ...

  7. 数据结构与算法学习--排序(桶排序,计数排序,基数排序)

    基数排序和计数排序可以参照链接 桶排序: 桶排序 (Bucket sort)或所谓的箱排序,是一个排序算法,工作的原理是将阵列分到有限数量的桶子里.每个桶子再个别排序(有可能再使用别的排序算法或是以递 ...

  8. 九大排序算法Java实现

    之前学习数据结构与算法时花了三天时间整理九大排序算法,并采用Java语言来实现,今天第一次写博客,刚好可以把这些东西从总结的文档中拿出来与大家分享一下,同时作为自己以后的备忘录. 1.排序算法时间复杂 ...

  9. 数据结构与算法 / 排序算法(3)

    一.桶排序(Bucket sort) 1.原理 将要排序的数据分到几个有序的桶里,每个桶里的数据再进行排序.桶内的数据排序完毕之后,再把桶里的数据依次取出,组成的序列就是有序的了. 2.原地排序? 属 ...

最新文章

  1. 前端学Markdown
  2. 如何做好OA流程审批?
  3. 计算机网络讨论4,计算机网络的创新研究讨论原稿(资料4)
  4. 来说一说你对锁都怎么分类?
  5. Python之numpy库
  6. underscorejs-groupBy学习
  7. ajax jquery php_基于Ajax jquery的使用php登录
  8. 静态网页制作作业_HTML CSS复习之制作静态网页
  9. python语言的三种数字类型_Python语言中的类型之数字类型--Python(10)
  10. a标签隐藏真实地址_推荐软件:Clover(窗口标签化工具)
  11. 何为仿射变换(Affine Transformation)
  12. 不能右键新建html文件,鼠标右键没有新建文本文档选项怎么办?
  13. 《致加西亚的信》读后感
  14. 大学计算机课英语心得体会,【大学计算机课程总结12篇】_大学计算机课程总结范文大全_2021年大学计算机课程总结_东城教研...
  15. unity2D小鸟飞过柱子小游戏
  16. leetcode-838:推多米诺
  17. jsp中点击img放大图片
  18. 阿里移动安全陈树华:安全的最高境界是无感知
  19. python zen_Python彩蛋--zen of python
  20. 那些好玩的网站(二)

热门文章

  1. PHP群发300万,mysql 300万数据查询500多秒如何优化
  2. 前端怎么使用jsessionid_前端搞微前端 | 侑夕 - 如何落地微前端一体化运营工作台...
  3. 创建对象的其中两种方法的比较
  4. [HNOI2013]比赛 搜索
  5. EF 线程内唯一对象
  6. 算法与数据结构实验题 6.4 Summary
  7. JS面向对象之创建对象
  8. u3d中刚体与碰撞体的理解以及is Trigger属性的意义
  9. ArcGIS 代理产品价格以及折扣表、产品描述
  10. Oracle对表的基本操作