方法一:
依次向后遍历,遇见偶数就与之后的交换,并检验是否仍为偶数
#include<stdio.h>
int main() {
int arr[] = { 1,3,4,5,7,9,8};//数列
int sz = sizeof(arr) / sizeof(arr[0]);
int i = 0;
for (i = 0; i < sz - 1; i++) {
int j = 1;
while (arr[i] % 2 == 0 && i + j < sz) {//若是偶数,则和下一个交换,若仍是,则和下下个交换,依次进行
int temp = arr[i];
arr[i] = arr[i + j];
arr[i + j] = temp;
j++;
}
}
for (i = 0; i < sz; i++) {
printf("%d", arr[i]);//打印
}
return 0;
}
方法二:
依次向后遍历,遇见偶数就与最后的交换,并检验是否仍为偶数
#include<stdio.h>
int main() {
int arr[] = { 1,3,4,5,7,9,8 };//数列
int sz = sizeof(arr) / sizeof(arr[0]);
int i = 0;
int j = 1;
for (i = 0; i < sz - 1; i++) {
while (arr[i] % 2 == 0 && i < sz-j) {//当是偶数的时候,和最后的一个交换,若还是,则和倒数第二个交换
int temp = arr[i];
arr[i] = arr[sz-j];
arr[sz -j] = temp;
j++;
}
}
for (i = 0; i < sz; i++) {
printf("%d", arr[i]);//挨个打印
}
return 0;
}
方法三:
从左遍历找偶数,从右遍历找奇数,在做交换,其中需要注意全是偶数或是奇数的情况
#include<stdio.h>
int main() {
int arr[] = { 1,3,4,5,7,9,8 };//数列
int sz = sizeof(arr) / sizeof(arr[0]);
int left = 0;
int right = sz - 1;
int i = 0;
while (left < right) {
while (left < right && arr[left] % 2 != 0) {//左侧找偶数
left++;
}
while (left < right && arr[right] % 2 == 0) {//右侧找奇数
right--;
}
int temp = arr[left];//交换
arr[left] = arr[right];
arr[right] = temp;
}
for (i = 0; i < sz; i++) {//打印
printf("%d ", arr[i]);
}
}