c++实现计数排序算法
时间: 2024-10-16 12:01:25 浏览: 25
计数排序是一种非基于比较的整数排序算法,它通过计算每个元素值出现的次数来进行排序。在C++中实现计数排序,通常适用于数据范围较小且元素都是整数的情况。以下是基本步骤:
1. **创建计数数组**:首先,创建一个大小为待排序数组最大值加一的计数数组,用于存储每个输入元素对应的计数值。
2. **统计频数**:遍历输入数组,对于每一个元素,将计数数组相应位置的计数加一。
3. **累加求和**:从计数数组的第一个元素开始,依次累加每个位置的计数值,形成新的数组,新数组的索引即为原值的位置。
4. **重建有序序列**:创建一个新的输出数组,从最小值开始,根据累加后的计数数组进行填充,将出现次数多次的元素放回对应的位置。
5. **复制原数组到结果**:最后,将处理过的输出数组复制回原始数组,完成排序。
下面是一个简单的C++计数排序示例:
```cpp
#include <iostream>
using namespace std;
void countSort(int arr[], int n) {
int max_val = *max_element(arr, arr + n);
int count[max_val + 1] = {0};
// 计算每个元素出现的频率
for (int i = 0; i < n; ++i)
count[arr[i]]++;
// 累加求和得到实际位置
for (int i = 1; i <= max_val; ++i)
count[i] += count[i - 1];
// 重建并填充排序数组
int output[n];
for (int i = n - 1; i >= 0; --i) {
output[count[arr[i]] - 1] = arr[i]; // 注意减一,因为count[]的下标从0开始
count[arr[i]]--;
}
// 将输出数组复制回原数组
for (int i = 0; i < n; ++i)
arr[i] = output[i];
}
// 测试函数
int main() {
int arr[] = {4, 2, 2, 8, 3, 3, 1};
int n = sizeof(arr) / sizeof(arr[0]);
countSort(arr, n);
for (int i : arr)
cout << i << " ";
return 0;
}
```
阅读全文