You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++实现数组奇数升序偶数降序输出结果不符问题咨询

问题分析

你的现有代码存在两个核心错误:

  1. 直接对完整数组进行排序,完全打乱了原数组中奇偶元素的位置分布,不符合「不改变奇偶元素原有位置」的要求
  2. 排序逻辑、循环边界存在错误,存在数组越界访问的问题,会引发未定义行为

正确实现思路

  • 先遍历原数组,将奇数、偶数分别存入两个独立的临时列表
  • 对奇数列表做升序排序,对偶数列表做降序排序
  • 再次遍历原数组,原位置是奇数就按顺序取排序后的奇数填充,原位置是偶数就按顺序取排序后的偶数填充,保证奇偶的位置和原数组完全一致
  • 最后输出处理后的完整数组

修正后的代码

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main()
{
    int n;
    cin >> n;
    vector<int> arr(n);
    vector<int> odds, evens;

    // 读入数组并拆分奇偶
    for (int i = 0; i < n; ++i)
    {
        cin >> arr[i];
        if (arr[i] % 2 == 1)
            odds.push_back(arr[i]);
        else
            evens.push_back(arr[i]);
    }

    // 奇数升序排序
    sort(odds.begin(), odds.end());
    // 偶数降序排序
    sort(evens.begin(), evens.end(), greater<int>());

    // 回填数组,保证奇偶位置不变
    int o_idx = 0, e_idx = 0;
    for (int i = 0; i < n; ++i)
    {
        if (arr[i] % 2 == 1)
            arr[i] = odds[o_idx++];
        else
            arr[i] = evens[e_idx++];
    }

    // 输出结果
    for (int i = 0; i < n; ++i)
    {
        cout << arr[i] << " ";
    }

    return 0;
}

用你给出的测试用例n=5,输入数组5 2 4 3 1运行后,会输出预期结果1 4 2 3 5。

内容的提问来源于stack exchange,提问作者karna naskar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 20:45:03