写出对数组的计数排序算法(假设数组中存储的是0-100之间的整数)(数组下标表示值,对应位置存储出现的次数,比如若c[2]为3,表示2这个数值出现了三次)。(请用c++
时间: 2024-12-11 18:19:06 浏览: 6
计数排序是一种非比较型整数排序算法,特别适合于数据范围较小且整数无负的情况,如题目所述数组元素在0-100之间。下面是使用C++实现计数排序算法的一个简单版本:
```cpp
#include <iostream>
#include <vector>
// 计数排序函数
void countingSort(int arr[], int n) {
std::vector<int> count(101, 0); // 初始化计数向量,大小为101,初始值为0
// 统计每个数字出现的次数
for (int i = 0; i < n; ++i)
count[arr[i]]++;
// 更新计数向量,将连续的值累加
for (int i = 1; i <= 100; ++i)
count[i] += count[i - 1];
// 从右往左填充原数组,记录每个元素的位置
std::vector<int> output(n);
for (int i = n - 1; i >= 0; --i) {
output[count[arr[i]] - 1] = arr[i]; // 将元素放到新数组的相应位置
count[arr[i]]--;
}
// 把结果复制回原数组
for (int i = 0; i < n; ++i)
arr[i] = output[i];
}
int main() {
int arr[] = {49, 75, 26, 84, 15, 64, 39, 100, 77, 50};
int n = sizeof(arr) / sizeof(arr[0]);
countingSort(arr, n);
std::cout << "Sorted array: ";
for (int i : arr)
std::cout << i << " ";
std::cout << "\n";
return 0;
}
```
在这个例子中,我们首先统计数组`arr`中每个数字的频率,然后按照频次逆序调整数组`count`,最后再通过`output`向量重构原数组,使其按升序排列。
阅读全文