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

用C语言实现:将数组偶数位置的奇数按升序排列

C语言程序:对数组偶数位置的奇数进行升序排序

需求:编写一个C语言程序,输入一个包含n个整数的数组(5≤n≤50),将数组从1开始计数的偶数位置上的奇数按升序排列。
示例1:
输入:6 2 7 2 1 2 5(6为数组元素个数,后续为元素)
输出:2 1 2 5 2 7
示例2:
输入:8 2 9 21 3 4 7 23 6
输出:2 3 21 7 4 9 23 6

实现思路

  • 读取输入的数组长度n和数组元素
  • 遍历数组的偶数位置(下标1、3、5...,对应1开始计数的偶数位),提取其中的奇数到临时数组
  • 对临时数组的奇数进行升序排序
  • 将排序后的奇数依次放回原数组对应的偶数位置
  • 输出处理后的数组

完整代码

#include <stdio.h>

int main() {
    int n;
    // 读取数组长度
    scanf("%d", &n);
    int arr[50];
    // 读取数组元素
    for (int i = 0; i < n; i++) {
        scanf("%d", &arr[i]);
    }

    int temp[25]; // 最多25个偶数位置(n最大50)
    int count = 0;
    // 提取偶数位置的奇数
    for (int i = 1; i < n; i += 2) { // i从1开始,步长2,对应1开始计数的偶数位置
        if (arr[i] % 2 != 0) {
            temp[count++] = arr[i];
        }
    }

    // 冒泡排序临时数组(升序)
    for (int i = 0; i < count - 1; i++) {
        for (int j = 0; j < count - 1 - i; j++) {
            if (temp[j] > temp[j + 1]) {
                int swap = temp[j];
                temp[j] = temp[j + 1];
                temp[j + 1] = swap;
            }
        }
    }

    // 将排序后的奇数放回原数组对应位置
    int idx = 0;
    for (int i = 1; i < n; i += 2) {
        if (arr[i] % 2 != 0) {
            arr[i] = temp[idx++];
        }
    }

    // 输出结果
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");

    return 0;
}

代码说明

  • 输入处理:通过scanf读取数组长度n和后续n个整数,存入数组arr。
  • 提取奇数:遍历下标为1、3、5...的位置,判断元素是否为奇数,若是则存入临时数组temp,同时记录有效元素数量count。
  • 排序:用冒泡排序处理临时数组,因为最多只有25个元素,冒泡排序完全够用,逻辑也简单易懂。
  • 放回元素:再次遍历原数组的偶数位置,把排序后的奇数依次替换原位置的奇数元素。
  • 输出:遍历处理后的数组,逐个打印元素。

测试示例

  • 示例1输入:
6 2 7 2 1 2 5

处理过程:

  • 偶数位置元素:7、1、5,均为奇数,临时数组为[7,1,5]

  • 排序后临时数组为[1,5,7]

  • 替换后数组:[2,1,2,5,2,7],与示例输出一致。

  • 示例2输入:

8 2 9 21 3 4 7 23 6

处理过程:

  • 偶数位置元素:9、3、7、23,均为奇数,临时数组为[9,3,7,23]
  • 排序后临时数组为[3,7,9,23]
  • 替换后数组:[2,3,21,7,4,9,23,6],与示例输出一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 07:57:32