在线编译器 C

#include <stdio.h> void sort_even_odd(int n, int a[]) { int B[n], C[n],b=0,i2 = 0 ; for(int i = 0; i < n-1; i++) { if (a[i] % 2 == 0) { B[b] = a[i]; b++; } else { C[i2] = a[i]; i2++; } } for (int j = b; j < n; j++) { B[j] = C[j-b]; } for(int i = 0; i< n ; i++) { a[i]= B[i]; } } int main() { int a[5] = {10,20,30,1,-10}; sort_even_odd(5,a); for(int i = 0; i<5 ; i++) { printf("%d ", a[i]); } return 0; }
这段代码试图实现一个函数,将数组中的偶数放在前面,奇数放在后面。但代码中存在一些逻辑问题。

- 第一个循环只遍历到 `n-1`,漏掉了最后一个元素。循环条件应该是 `i < n` 而不是 `i < n-1`。
- 第二个循环中,将 `C` 数组的元素复制到 `B` 数组时,`j` 从 `b` 开始,但 `C` 数组的有效元素个数是 `i2`,这里直接用 `j-b` 作为索引,如果 `i2` 不等于 `n-b` 可能会越界或漏掉元素。实际上应该用 `i2` 来控制复制次数,而不是依赖 `j` 的范围。