原理:例如输入数字 1 2 3 4 5
用一个循环来实现:其中 i 指向数组头=1 ; j 指向 数组尾=5
第一步:1是奇数 ,i 后移一步,指向2
第二步:2 和 5 对换, 得出:1 5 3 4 2
第三步:i 指向3 ,j 指向 4,此时满足条件,不用交换
最后得出想要的序列
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 10
void fanzhuan(int arr[], int arr_len) {
int i = 0;
int j = arr_len - 1;
int temp;//定义一个中间元素用来交换
while (i < j) {
if ((arr[i] % 2 == 0) && (arr[j] % 2 == 1)) {//此处 i所指元素为偶数 并且 j所指元素为奇数
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
if (arr[i] % 2 == 1) {//碰巧第一个数为奇数
i++;
}
if (arr[j] % 2 == 0) {//碰巧最后一个数为偶数
j--;
}
}
}
int main() {
int arr[N] = { 1,2,3,4,5,6,7,8,9,10 };
int arr_len = 0;
arr_len = N;
fanzhuan(arr,arr_len);
for (int i = 0; i < N; i++) {
printf("%d ", arr[i]);
}
}
最后结果