1 条题解
-
0
计数排序:
#include <bits/stdc++.h> using namespace std; // 计数排序函数:对一个范围在[0, maxVal]内的数组进行排序 void countingSort(vector<int>& arr, int maxVal, bool reverse = false) { vector<int> count(maxVal + 1, 0); // 计数数组,大小为maxVal+1 for (int num : arr) { count[num]++; // 统计每个数的出现次数 } int index = 0; if (reverse) { // 从最大值开始,按降序排列 for (int i = maxVal; i >= 0; i--) { while (count[i]--) { arr[index++] = i; } } } else { // 从最小值开始,按升序排列 for (int i = 0; i <= maxVal; i++) { while (count[i]--) { arr[index++] = i; } } } } int main() { vector<int> nums(10); // 读取输入的10个整数 for (int i = 0; i < 10; i++) { cin >> nums[i]; } vector<int> odd, even; // 分离奇数和偶数 for (int num : nums) { if (num % 2 == 0) { even.push_back(num); } else { odd.push_back(num); } } // 对奇数按降序排序 countingSort(odd, 30000, true); // 对偶数按升序排序 countingSort(even, 30000, false); // 输出排序后的结果,奇数在前,偶数在后 for (int i = 0; i < odd.size(); i++) { cout << odd[i] << " "; } for (int i = 0; i < even.size(); i++) { cout << even[i] << " "; } cout << endl; return 0; }
- 1
信息
- ID
- 661
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 9
- 标签
- 递交数
- 7
- 已通过
- 5
- 上传者