C语言如何实现将一个数组的奇数从小到大排列在前,偶数从大到小排列在后
时间: 2023-12-23 21:03:37 浏览: 119
数组遍历,奇数在前,偶数在后
3星 · 编辑精心推荐
可以通过两次遍历数组来实现这个要求。第一次遍历将奇数按从小到大的顺序放在数组前面,第二次遍历将偶数按从大到小的顺序放在数组后面。
具体的实现步骤如下:
1. 定义两个指针i和j,i指向数组的第一个元素,j指向数组的最后一个元素。
2. 从左往右遍历数组,如果找到一个奇数,则将其与i所指向的位置交换,并将i指针向右移动一位。
3. 从右往左遍历数组,如果找到一个偶数,则将其与j所指向的位置交换,并将j指针向左移动一位。
4. 重复步骤2和步骤3,直到i >= j为止。
下面是C语言代码示例:
```c
void sortArray(int arr[], int len) {
int i = 0, j = len - 1;
while (i < j) {
while (i < j && arr[i] % 2 != 0) i++;
while (i < j && arr[j] % 2 == 0) j--;
if (i < j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
// 对奇数部分进行排序
for (int k = 0; k < i; k++) {
for (int l = k + 1; l < i; l++) {
if (arr[k] > arr[l]) {
int temp = arr[k];
arr[k] = arr[l];
arr[l] = temp;
}
}
}
// 对偶数部分进行排序
for (int k = i; k < len; k++) {
for (int l = k + 1; l < len; l++) {
if (arr[k] < arr[l]) {
int temp = arr[k];
arr[k] = arr[l];
arr[l] = temp;
}
}
}
}
```
阅读全文