用c语言程序从键盘上输入10个整数,然后对其中的奇数进行从小到大的顺序排序,偶数位置不变,并输出排序后的这10个整数。要求采用函数实现选择法排序。
时间: 2024-12-22 15:33:29 浏览: 4
在C语言中,你可以通过编写一个选择排序函数来实现这个需求。选择排序是一种简单直观的排序算法,它的工作原理是每一次从未排序的部分找到最小(或最大)元素,放到已排序部分的末尾。下面是步骤和代码示例:
1. 首先,我们需要创建一个`swap`函数来交换数组中的两个元素。
2. 然后定义一个名为`selection_sort`的函数,接受一个包含10个整数的数组作为参数,并按照上述描述进行操作。
3. 对于奇数索引的元素,我们分别与剩余未排序部分的最小元素进行比较并交换,直到所有奇数都排好序。
4. 排序完成后,原地更新数组即可。
```c
#include <stdio.h>
// 交换数组中两个元素的位置
void swap(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
// 选择排序函数,只对奇数索引的元素进行排序
void selection_sort_odd(int arr[], int size) {
for (int i = 0; i < size / 2; i++) {
// 找到奇数索引中的最小元素
int min_index = 2 * i + 1;
for (int j = 2 * i + 2; j < size && j % 2 != 0; j += 2) {
if (arr[j] < arr[min_index]) {
min_index = j;
}
}
// 如果找到了更小的奇数,交换位置
if (min_index != 2 * i + 1) {
swap(&arr[i], &arr[min_index]);
}
}
}
// 主函数,获取用户输入并调用排序函数
int main() {
int numbers[10];
printf("请输入10个整数:\n");
for (int i = 0; i < 10; i++) {
scanf("%d", &numbers[i]);
}
selection_sort_odd(numbers, 10);
printf("排序后的数组(奇数位升序,偶数位保持不变):");
for (int i = 0; i < 10; i++) {
printf("%d ", numbers[i]);
if ((i+1) % 2 == 0) { // 每隔一个打印换行
printf("\n");
}
}
return 0;
}
```
阅读全文