计数排序

计数排序

---雨竹清风

计数排序的思想:

计数排序就是使用一个辅助数组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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值