解题思路,定义左下标和右下边,分别从数组的左边寻找偶数、从数组的右边寻找奇数,若找到则进行交换,如此循环即可。 编译器:Vs2017 源码如下: #include<stdio.h> void pri(int arr[], int n)//打印数组 { int i = 0; for ( i = 0; i < n; i++) { printf("%d", arr[i]); } } void move(int arr[], int n) { int left = 0;//arr【left】指向数组第一个元素 int right = n - 1;//arr[right]指向数组最后一个元素, int tem = 0;//创建一个临时变量,用于交换数组元素 while (left<right) { while ((left<right)&&(arr[left]%21))//从前往后找偶数,比如1,1%2!=0,left++,arr【1】为2,2%20,结束循环,此时arr【left】指向2, { left++;
}
while ((left<right)&&(arr[right]%2 ==0))//从后往前找奇数,比如arr【right】此时是8,8%2==0,进入循环,right--,此时arr【right】指向7,不符合循环条件
{
right--;
}
if (left<right)//第一个while循环找到了一个偶数,第二个while循环找到了奇数,如果找到开始交换两个元素
{
tem = arr[left];
arr[left] = arr[right];
arr[right] = tem;
}
}
} int main() { int ch[] = { 1,2,3,4,5,6,7,8 };//定义一个数组 int sz = sizeof(ch) / sizeof(ch[0]);//求出数组长度 move(ch, sz); pri(ch, sz);
return 0;
}
|