C语言数组奇偶排序(数组) 题目描述 输入n,输入n个整数。调整数字位置使得偶数在序列的前半部分,奇数在序列的后半部分。 注:自己根据样例输入、输出找到算法。 要求算法的时间复杂度为O(n)。 输入 测试次数t 每组测试数据格式如下: 整数个数n,后跟n个整数 输出 将每组整数个和数测试数据作为一个序列,输出整数后的序列。
时间: 2024-03-13 11:47:41 浏览: 16
好的,这是一个比较简单的问题,我可以给你提供一个 C 语言的实现,时间复杂度为 O(n)。代码如下:
```c
#include <stdio.h>
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
void sort(int arr[], int n) {
int left = 0; // 左指针指向序列的开头
int right = n - 1; // 右指针指向序列的结尾
while (left < right) {
while (left < right && arr[left] % 2 == 0) {
left++;
}
while (left < right && arr[right] % 2 != 0) {
right--;
}
if (left < right) {
swap(&arr[left], &arr[right]);
}
}
}
int main() {
int t;
scanf("%d", &t);
while (t--) {
int n;
scanf("%d", &n);
int arr[n];
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
sort(arr, n);
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
return 0;
}
```
这段代码首先读入测试数据的组数 t,然后对于每组测试数据,读入整数个数 n 和 n 个整数,然后调用 `sort()` 函数对整数序列进行排序,最后输出排序后的整数序列。
在 `sort()` 函数中,我们使用了双指针的思想,左指针指向序列的开头,右指针指向序列的结尾。当左指针指向的数是偶数时,左指针往右移动一位;当右指针指向的数是奇数时,右指针往左移动一位;如果此时左指针指向的数是奇数,右指针指向的数是偶数,我们就交换这两个数。这样做的时间复杂度是 O(n)。