用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
相关产品推荐
相关产品推荐

