完成程序,只在Program和End之间增加代码。编写一个为数组排序的函数oddeven(int a[], int n);其中a为待排序的数组,n为数组中的元素个数(n<100)。排序要求: (1)奇数在前,偶数在后,即奇数下标比偶数小; (2)奇数按从小到大排列; (3)偶数按从大到小排列。
时间: 2023-07-16 20:17:12 浏览: 104
下面是函数oddeven的代码实现:
```
void oddeven(int a[], int n) {
int i, j, temp;
for (i = 0; i < n; i++) {
for (j = i+1; j < n; j++) {
if (a[i] % 2 == 0 && a[j] % 2 == 1) { // 奇偶性不同,交换位置
temp = a[i];
a[i] = a[j];
a[j] = temp;
} else if (a[i] % 2 == 1 && a[j] % 2 == 1 && a[i] > a[j]) { // 两个奇数,大小顺序不对,交换位置
temp = a[i];
a[i] = a[j];
a[j] = temp;
} else if (a[i] % 2 == 0 && a[j] % 2 == 0 && a[i] < a[j]) { // 两个偶数,大小顺序不对,交换位置
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
}
```
解释一下代码实现:
首先使用两层循环,遍历所有的数组元素,对于每一个元素,再与后面的元素进行比较。
如果两个元素的奇偶性不同,则需要将它们交换位置,因为题目要求奇数在前偶数在后,而且奇数下标比偶数小。
如果两个元素都是奇数,且顺序不正确,需要将它们交换位置,使得奇数按从小到大排列。
如果两个元素都是偶数,且顺序不正确,需要将它们交换位置,使得偶数按从大到小排列。
最终完成排序后,数组a中的奇数就在前面,偶数在后面,并且奇数按从小到大排列,偶数按从大到小排列。
阅读全文