Online Compiler C

#include <stdio.h> void sort_even_odd(int n, int a[]){ int count1=0,count2=0,x=0,y=0; for(int i=0;i<n;i++){ if(a[i]%2==0){ count1++; }else if(a[i]%2!=0){ count2++; } }int b[count1],c[count2]; for(int i=0;i<count1;i++){ if(a[i]%2==0){ b[x]=a[i]; x++; } } for(int i=0;i<count2;i++){ if(a[i]%2!=0){ c[y]=a[i]; y++; } }for(int i=0;i<n;i++){ if(i<count1){ a[i]=b[i]; } if(i>=count1){ a[i]=c[i-count1]; } } } int main() { int a[5]={1,0,1,0,1}; sort_even_odd(5,a); return 0; }
这段代码的目的是将数组中的偶数放在前面,奇数放在后面。但代码中存在逻辑错误,导致结果不正确。

主要问题在于第二个循环中,你遍历数组时只检查了前count1个元素,而不是整个数组。这样会漏掉后面的偶数元素,导致b数组没有收集到所有偶数。

- 第二个循环应该遍历整个数组(0到n-1),而不是只到count1。同样,第三个循环也应该遍历整个数组。
- 注意:你同时使用了count1和count2来记录奇偶个数,但在收集元素时,循环范围写错了,导致部分元素没有被处理。