输入n,输入n个整数。调整数字位置使得偶数在序列的前半部分,奇数在序列的后半部分。 注:自己根据样例输入、输出找到算法。 要求算法的时间复杂度为O(n)。 输入 测试次数t 每组测试数据格式如下: 整数个数n,后跟n个整数 输出 将每组整数个和数测试数据作为一个序列,输出整数后的序列。用c语言编写
时间: 2024-02-26 21:59:25 浏览: 71
C语言编程题
4星 · 用户满意度95%
以下是一种可能的实现方式:
```c
#include <stdio.h>
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
void reorder(int arr[], int n) {
int i = 0, j = n - 1;
while (i < j) {
while (i < j && arr[i] % 2 == 0) i++;
while (i < j && arr[j] % 2 == 1) j--;
if (i < j) {
swap(&arr[i], &arr[j]);
i++;
j--;
}
}
}
int main() {
int t, n, i, j;
scanf("%d", &t);
for (i = 0; i < t; i++) {
scanf("%d", &n);
int arr[n];
for (j = 0; j < n; j++) {
scanf("%d", &arr[j]);
}
reorder(arr, n);
for (j = 0; j < n; j++) {
printf("%d ", arr[j]);
}
printf("\n");
}
return 0;
}
```
这段代码定义了一个函数 `reorder`,该函数接受一个整数数组和数组长度作为参数,将偶数移到数组前半部分,奇数移到数组后半部分。具体来说,使用两个指针 `i` 和 `j` 分别指向数组头部和尾部,然后不断移动指针,交换奇偶数位置,直到指针相遇。这个过程中,时间复杂度为 O(n)。
在 `main` 函数中,读入数据并调用 `reorder` 函数对数组进行重排,并打印出结果。
阅读全文