Online Compiler C

#include <stdio.h> void sort_even_odd(int n, int a[]){ int i,j,temp; for(i=0;i<n;i++){ for(j=0;j<n-1-i;j++){ if(a[j]%2==0&&a[j+1]%2!=0){ temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } } } } int main() { int a[5] = {1, 23, 5, 8, 6};//1 5 8 6 23// sort_even_odd(5, a); return 0; }
这段代码定义了一个函数 `sort_even_odd`,它试图将数组中的偶数移到前面,奇数移到后面。但目前的实现只进行了一次冒泡式的交换,没有完全实现将所有偶数排在奇数前面的目标。

- 你的循环条件 `if(a[j]%2==0&&a[j+1]%2!=0)` 只交换了相邻的偶数和奇数,但一次遍历不足以把所有偶数都移到前面。你需要考虑如何让偶数持续向左移动,直到所有偶数都在奇数之前。
- 注意你使用了冒泡排序的外层循环,但内层循环的交换条件只处理了偶数在奇数右边的情况,没有处理奇数在偶数左边的情况。实际上,你只需要把偶数向左移动,但当前逻辑只交换了相邻的一对,没有重复扫描直到全部排好。