用C++实现描述 用基数排序算法,对-1000000 ~1000000以内的整数,进行升序排序。 输入描述 输入一组整数,数字之间以空格隔开。 输出描述 按照升序顺序输出结果,数字之间以空格隔开。
时间: 2024-02-11 10:07:38 浏览: 76
以下是用 C++ 实现的代码:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void radixSort(vector<int>& nums) {
int maxVal = *max_element(nums.begin(), nums.end());
int exp = 1;
while (maxVal / exp > 0) {
vector<int> count(10, 0);
vector<int> output(nums.size());
for (int i = 0; i < nums.size(); i++) {
int digit = (nums[i] / exp) % 10;
count[digit]++;
}
for (int i = 1; i < count.size(); i++) {
count[i] += count[i - 1];
}
for (int i = nums.size() - 1; i >= 0; i--) {
int digit = (nums[i] / exp) % 10;
output[count[digit] - 1] = nums[i];
count[digit]--;
}
nums = output;
exp *= 10;
}
}
int main() {
vector<int> nums;
int num;
while (cin >> num) {
nums.push_back(num);
}
radixSort(nums);
for (int i = 0; i < nums.size(); i++) {
if (i > 0) {
cout << " ";
}
cout << nums[i];
}
return 0;
}
```
代码解析:
我们使用基数排序算法来对输入的整数进行排序。基数排序的基本思想是从低位到高位依次排序,具体过程如下:
1. 找到输入数组中最大的数字 maxVal,计算出 maxVal 的位数;
2. 从低位到高位依次排序,对于每一位,按照该位上的数字进行计数排序;
3. 将排序结果覆盖输入数组,继续进行下一位的排序;
4. 当所有位都排序完成后,输入数组就是排序后的结果。
在实现基数排序时,我们需要维护两个数组:计数数组和输出数组。计数数组用于记录每个数字在当前位上的出现次数,输出数组则用于存储排好序的结果。我们首先遍历输入数组,统计每个数字在当前位上的出现次数,然后计算出每个数字在输出数组中的位置,最后将输入数组复制到输出数组中对应的位置上。重复执行这个过程,直到所有位都排序完成。
在主函数中,我们读入输入的整数并将它们存储在一个 vector 中。然后调用基数排序算法进行排序,并将排序结果输出。
例如,对于输入 "3 1 4 5 2 9 7 6 8 0",经过基数排序之后,输出 "0 1 2 3 4 5 6 7 8 9"。
阅读全文