计数排序
来源:互联网 发布: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数组中 4和3个数都为2,所以C数组中的下标为4和3的位置的数为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。
伪代码如下:k是A数组中最大的数
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);
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 翻页查看文件,数据选取,非纯文本文件查看
- typedef struct,自定义数据类型struct和类的区别
- 使用类的好处
- string有关函数
- 通过RFC(C#)连接SAP系统
- 计数排序
- 产生随机数的方法:
- 修改文件时间或者创建新文件:touch
- vector(1)
- Bitmap
- vector(2)
- vector(3)
- vector(4)
- deque(1)