## 计数排序 ### 一、前置知识 #### C++求整数数组长度的办法 ```c++ int len = sizeof(a) / sizeof(int); ``` ### 二、算法步骤 * 准备数组中 最大值那么多的桶,枚举每一个数字,发现一个数字,就将对应桶号中的个数加$1$。 * 从头开始枚举每个 有可能的桶,看看里面有几个计数,就打印几个当前的桶号。 ### 三、算法动画
### 四、代码实现 ```c++ #include using namespace std; const int INF = 0x3f3f3f3f; const int N = 1e6 + 10; int a[] = {1, 2, 5, 4, 3, 2}; int b[N]; int mx, mi = INF; int main() { // C++求整数数组长度的办法 int len = sizeof(a) / sizeof(a[0]); //最大值,最小值 for (int i = 0; i < len; i++) mx = max(mx, a[i]), mi = min(mi, a[i]); //最大值:5,最小值:1 //放入桶 for (int i = 0; i < len; i++) b[a[i]]++; //排序结果 for (int i = mi; i <= mx; i++) { for (int j = 1; j <= b[i]; j++) printf("%d ", i); } return 0; } ```