模拟法计数排序问题c++
时间: 2023-08-03 08:42:24 浏览: 95
计数排序是一种非比较排序算法,可以用于对一组数据进行排序。下面是使用模拟法实现计数排序的C++代码:
```c++
#include <iostream>
#include <cstring>
using namespace std;
const int MAXN = 100000; // 数据范围
int a[MAXN], b[MAXN], c[MAXN];
void countingSort(int a[], int b[], int c[], int n) {
memset(c, 0, sizeof(c)); // 将计数数组清零
for (int i = 0; i < n; ++i) {
++c[a[i]]; // 统计每个数出现的次数
}
for (int i = 1; i < MAXN; ++i) {
c[i] += c[i - 1]; // 计算每个数在排序后的序列中的位置
}
for (int i = n - 1; i >= 0; --i) {
b[c[a[i]] - 1] = a[i]; // 将数放到排序后的序列中
--c[a[i]];
}
}
int main() {
int n;
cin >> n;
for (int i = 0; i < n; ++i) {
cin >> a[i];
}
countingSort(a, b, c, n);
for (int i = 0; i < n; ++i) {
cout << b[i] << " ";
}
cout << endl;
return 0;
}
```
其中,`a` 数组存放待排序的数据,`b` 数组存放排序后的数据,`c` 数组存放每个数出现的次数。`countingSort` 函数中,第一个循环用来统计每个数出现的次数,第二个循环用来计算每个数在排序后的序列中的位置,第三个循环用来将数放到排序后的序列中。最后,输出排序后的序列即可。
阅读全文