1 条题解

  • 0
    @ 2025-2-12 15:52:50

    计数排序:

    #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
    上传者