请给出用C++写计数排序的示例代码,并做好注释,数组要用vector
时间: 2024-04-09 19:27:49 浏览: 92
当然可以!以下是使用C++和vector实现计数排序的示例代码:
```cpp
#include <iostream>
#include <vector>
using namespace std;
// 计数排序函数
void countingSort(vector<int>& arr) {
int maxVal = *max_element(arr.begin(), arr.end()); // 找到数组中的最大值
int size = arr.size();
// 创建计数数组并初始化为0
vector<int> count(maxVal + 1, 0);
// 统计每个元素出现的次数
for (int i = 0; i < size; i++) {
count[arr[i]]++;
}
// 计算每个元素在排序后的数组中的位置
for (int i = 1; i <= maxVal; i++) {
count[i] += count[i - 1];
}
vector<int> output(size); // 创建输出数组
// 根据计数数组将元素放到正确的位置上
for (int i = size - 1; i >= 0; i--) {
output[count[arr[i]] - 1] = arr[i];
count[arr[i]]--;
}
// 将排序后的数组赋值给原始数组
for (int i = 0; i < size; i++) {
arr[i] = output[i];
}
}
// 测试计数排序算法
int main() {
vector<int> arr = {4, 2, 2, 8, 3, 3, 1};
cout << "原始数组:";
for (int num : arr) {
cout << num << " ";
}
countingSort(arr);
cout << "\n排序后的数组:";
for (int num : arr) {
cout << num << " ";
}
return 0;
}
```
以上代码中,`countingSort`函数用于实现计数排序算法。它首先找到数组中的最大值,然后创建一个计数数组并将其初始化为0。接下来,它遍历原始数组并统计每个元素的出现次数。然后,通过累加计数数组,计算每个元素在排序后的数组中的位置。最后,根据计数数组将元素放到正确的位置上,形成排序后的数组。
在`main`函数中,我们创建了一个测试数组,并调用`countingSort`函数对其进行排序。最后,打印原始数组和排序后的数组。
希望这个示例能够帮助到你!如果有任何疑问,请随时提问。
阅读全文