给定一个长度为n(0<n≤200)的正整数序列,按照以下要求排序: 奇数排在偶数前面; 奇数与偶数各自从小到大排列; 请根据以上要求完成排序,输出排序后的整数序列。 输入格式: 第一行给定一个整数n,第二行给出n个正整数,每个正整数不会超过int所能表示的范围。 输出格式: 输出排序后的整数序列,每行一个整数,共n行。,写出c语言代码
时间: 2024-02-13 10:05:21 浏览: 233
以下是 C 语言实现该题目的代码:
```c
#include <stdio.h>
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
void oddEvenSort(int arr[], int n) {
int i, j, odd_idx;
for (i = 0; i < n-1; i++) {
odd_idx = i;
for (j = i+1; j < n; j++)
if (arr[j] % 2 && arr[j] < arr[odd_idx])
odd_idx = j;
if (i != odd_idx)
swap(&arr[i], &arr[odd_idx]);
}
for (i = 0; i < n-1; i++) {
if (arr[i] % 2 == 0) {
int min_idx = i;
for (j = i+1; j < n; j++)
if (arr[j] % 2 == 0 && arr[j] < arr[min_idx])
min_idx = j;
if (i != min_idx)
swap(&arr[i], &arr[min_idx]);
}
}
}
int main() {
int n, i;
scanf("%d", &n);
int arr[n];
for (i = 0; i < n; i++)
scanf("%d", &arr[i]);
oddEvenSort(arr, n);
for (i = 0; i < n; i++)
printf("%d\n", arr[i]);
return 0;
}
```
其中,`oddEvenSort()` 函数实现了奇数排在偶数前面并且奇数与偶数各自从小到大排列的排序算法。首先,它找到第一个奇数的位置,然后将其与当前位置交换;接着,它对剩下的偶数进行从小到大的选择排序。
时间复杂度为 O(n^2),但由于数据规模较小,所以可以通过本题。
阅读全文