计数排序

来源:互联网 发布:shop 4.0 源码下载 编辑:程序博客网 时间:2024/06/06 06:35

计数排序

---雨竹清风

计数排序的思想:

计数排序就是使用一个辅助数组C,对数组A中的数进行排序,B数组存放排好序的数据。C数组的长度是A数组中最大数。B数组的长度与A数组的长度相同。

1. C数组进行初始化为0

2. C数组进行赋值。A数组中的值 == C数组下标,将C数组中的相应的位置加1.即:C[A[j]] = C[A[j]] + 1;

3. C数组,下标为i的数+其前一项的值 = C[i];即:

C[i] = C[i] + C[i - 1];

4. A数组中的某一项拿出来设为a,到C数组中去查下标为a的值,即是将要插入到B数组中的下标,即:

B[C[A[j]]] = A[j];

随即将C数组中相应的位置的数减一。

例子:

计数排序 - 雨竹清风 - 雨竹清风的博客
 
计数排序 - 雨竹清风 - 雨竹清风的博客
 

1. C数组初始化

计数排序 - 雨竹清风 - 雨竹清风的博客
 

2.对C数组进行赋值


 

计数排序 - 雨竹清风 - 雨竹清风的博客
 

 A数组中 43个数都为2,所以C数组中的下标为43的位置的数为2

3.累加和

计数排序 - 雨竹清风 - 雨竹清风的博客
 

4.A数组中的某一项拿出来设为a,到C数组中去查下标为a的值,即是将要插入到B数组中的下标。

计数排序 - 雨竹清风 - 雨竹清风的博客
 

 


  

拿出A数组中最后一个位置的数3,到C数组中查找3号位置的数,是3.那么将A数组中的3插入到B数组中3号位置。

计数排序 - 雨竹清风 - 雨竹清风的博客

 

拿出A数组中倒数第二个位置的数4,到C数组中查找4号位置的数,是5.那么将A数组中的4插入到B数组中5号位置。

 

 

 


计数排序 - 雨竹清风 - 雨竹清风的博客
 

/////

。。。。。。

最后得到的B数组为:

计数排序 - 雨竹清风 - 雨竹清风的博客
 

即是A数组排好的顺序。

注意A数组中可能会有0的存在,所以应该单独处理0


伪代码如下kA数组中最大的数

for i = 1 ~ k

  do C[i] = 0;

for j = 1 ~ n

   do C[A[j]] += 1;

for i = 2 ~ k

   do C[i]+= C[i - 1];

for j = n ~ 1

  do B[C[A[j]]] = A[j];

     C[A[j]] -= 1;

时间复杂度是O(n + k);

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 4个月的宝宝不吃奶怎么办 九个月宝宝一直高烧不退怎么办 8个月宝宝不吃辅食怎么办 孩子七个月了母乳不够了怎么办 11个月宝宝吃的太多怎么办 宝宝十一个月了上火眼死太多怎么办 9个月孩子不吃辅食怎么办 y一夜没有睡好现在母乳不够怎么办 喂母乳的婴儿总要吃奶怎么办 宝宝四个月了奶水不够吃怎么办 宝宝出生十天了奶水不够吃怎么办 宝宝晚上不吃奶了奶水多怎么办 我家小孩六个月了奶不够吃怎么办 六个月的宝宝奶不够吃怎么办 宝贝六个月了奶不够吃怎么办 奶不够吃宝宝又不吃奶粉怎么办 婴儿到新环境哭闹不睡觉怎么办 婴儿到陌生地方狂哭不止怎么办 在家里遇到有人有陌生人敲门怎么办 在家里晚上睡觉遇到持刀小偷怎么办 在租房中房东随意调换房间怎么办 梦见熟人当面说我坏话偷东西怎么办 偷了家里的存折拿了钱该怎么办 故意让小偷偷车捉住他怎么办 进屋门正对着厕所门怎么办 楼房对面门上放个镜子我该怎么办 从顺丰发的水果坏了顺丰不管怎么办 汽车塑料件被机头水腐蚀了怎么办 孕期吃了炒菜里面加的香精怎么办 五个月宝宝只长身高不长体重怎么办 孩子6个月奶水越来越少怎么办 孩子快三个月了奶水越来越少怎么办 老婆生完孩子乳房肿胀不下奶怎么办 大人吃了退烧药不出汗怎么办 三岁宝宝抵抗力差总生病怎么办 8个月宝宝发烧39度怎么办 小孩发烧吃了药不退烧怎么办 小孩一直发烧39度左右不退怎么办 九个月宝宝反复发烧39度怎么办 八个月宝宝反复发烧39度怎么办 十个月宝宝反复发烧39度怎么办