方法一:

依次向后遍历,遇见偶数就与之后的交换,并检验是否仍为偶数

#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]);
    }
}

将数组中所有奇数排到偶数前面_奇数