排序:计数排序

简介:

原理

计数排序要求要排序的数据必须是介于一定范围的整数。
假设要排的数介于0~k之间,且保存在数组A中,排序结果保存在数组Z中。可以建立一个临时数组T[k+1],将数组A中值为i的元素用T的下标i表示,而T[i]的值就是A中小于等于i的个数。然后通过T将A中的数一一映射到Z中。

举例

假设A={0,4,2,2,3},由于A中的数据范围介于0~4之间,故建立T[5]并初始化为0。
其中小于等于0的数只有它本身一个,故T[0]=1;小于等于2的有3个,故T[2]=3;小于等于3的有4个,故T[3]=4;小于等于4的有5个,故T[4]=5。
接下来就是将A中的数通过T映射到Z中。我们可以从A[0]遍历到A[4]:
1.A[0]=0,由T[0]=0知道小于等于它的只有它本身一个,那他肯定是最小的那个,所以我们可以将它排在Z中的第一位即Z[0]中,然后T[0]自减;
2.A[1]=4,由T[4]=5知道它应该排在Z[4]的位置,然后T[4]自减;
3.A[2]=2,由T[2]=3知道它应该排在Z[2]的位置,然后T[2]自减,为什么要自减?因为如果不自减的话下次再排2的时候又会排在Z[2]的位置上,实际上前面已经排了一次了,所以现在小于等于它的数肯定少了一个。故要自减;
4.A[3]=2,由于前面T[2]自减了一次,所以T[2]=2,现在的2应该排在Z[1]的位置。
5.A[4]=3,T[3]=4,故3排在Z[3]位置。
遍历完成,Z[0]到Z[4]依次为0,2,2,3,4。完成排序。

明白原理后写代码就很简单了。。
相关文章
|
4月前
|
算法 搜索推荐 大数据
【算法】排序——归并排序和计数排序
上两篇文章讲解了插入排序、选择排序以及交换排序,每种类型的排序大类下都有一到两种排序,今天给大家带来的是归并排序,和前面几种排序一样都属于比较排序中的一种,是通过比较数组中的元素来实现排序的,还给大家带来一种非比较排序计数排序,让我们开始今天的排序之吧!!!
|
3月前
|
C语言
排序:计数排序
排序:计数排序
11 0
|
3月前
|
搜索推荐 算法
排序——计数排序
排序——计数排序
16 0
|
3月前
|
算法 搜索推荐
排序——选择排序
排序——选择排序
18 0
|
6月前
|
存储
排序篇(五)----非比较排序
排序篇(五)----非比较排序
19 0
|
6月前
|
算法 搜索推荐 索引
排序篇(二)----选择排序
排序篇(二)----选择排序
15 0
|
10月前
|
搜索推荐
排序(2)之选择排序
继插入排序后,今天小编就给大家另一个模块,选择排序的学习,那么话不多说,我们直接进入正题。
84 0
|
10月前
|
算法
排序(3)之交换排序
今天小编给大家带来交换排序的内容,对于交换排序中的快速排序在理解上会相对困难一点,小编这里会配合图片给大家细细讲解。那么现在就开始我们今天的主题。
46 0
|
索引
掌握常见的几种排序-选择排序
选择排序是一种简单的排序,时间复杂度是O(n^2),在未排序的数组中找到最小的那个数字,然后将其放到起始位置,从剩下未排序的数据中继续寻找最小的元素,将其放到已排序的末尾,以此类推,直到所有元素排序结束为止。
掌握常见的几种排序-选择排序
|
算法 搜索推荐
排序——归并排序和计数排序
介绍归并排序和计数排序
85 0
排序——归并排序和计数排序