c语言中 排列偶数与奇数,奇数在后,偶数在前

#include "stdio.h"
void main()
{
int i,j,k,m,o,a[10000];
printf("输入要输入数的个数\n");
scanf("%d",&o);
printf("输入数\n");
for(i=1;i<o+1;i++)
{scanf("%d",&a[i]);}
for(i=1,j=o;i<o+1;i++,j=o)
{if(a[i]%2!=0)
{ do
{ k=a[j]%2;
j--;

}
while(k==0);
if(j>=i)
{ m=a[++j];
a[j]=a[i];
a[i]=m;}
}
}
for(i=1;i<o+1;i++)
{printf(" %d ",a[i]);}

}
请问哪里有逻辑错误,怎么运行之后排序出问题

void main()

    int i,j,k,m,o,a[10000]; 

    printf("输入要输入数的个数\n"); 
    scanf("%d",&o); 

    printf("输入数\n"); 

    for(i=1;i<o+1;i++)  {
        scanf("%d",&a[i]);
    } 

    for(i=1,j=o;i<o+1;i++,j=o)  {
            while (j >= 0 && (a[j] % 2) == 0) {
                j--;
            }

            if(j>=i)  { 
                m=a[j]; 
                a[j]=a[i]; 
                a[i]=m;
            }
    } 

    for(i=1;i<o+1;i++)  {
        printf("  %d  ",a[i]);
    }

 while (1);
}

 

 

这样就OK

 

 

 

这个是我写的

---------------------------------------------------

void sort(int *aa, int size)
{
    int left, right, tmp;

    left = 0;
    right = size - 1;

    for (; left < right; ) {
        if ((aa[left] & 1)) {
            left++;
            continue;
        }         

        if (!(aa[right] & 1)) {
            right--;
            continue;
        } 

        tmp = aa[left];
        aa[left] = aa[right];
        aa[right] = tmp;

        left++;
        right--;
    }       
}

void main()

    int i,j,k,m,o,a[10000]; 

    printf("输入要输入数的个数\n"); 
    scanf("%d",&o); 

    printf("输入数\n"); 

    for(i=1;i<o+1;i++)  {
        scanf("%d",&a[i]);
    } 

 

 sort(a + 1, o);

 

    for(i=1;i<o+1;i++)  {
        printf("  %d  ",a[i]);
    }

 while (1);
}

 

 

 

--------------------------------------------------

温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-05-07
#include
<stdio.h>//主函数
#define
N
10
main()
{
int
A[10],B[10],i,j,p,s=0,h=5,k;//定义数组名与变量名
printf("输入十个数字、回车键确定:\n");
for
(i=0;i<10;i++)//遍历录入数组元素
{
scanf("%d",&A[i]);
}
for
(j=0;j<10;j++)//将偶数放在数组前面,奇数放在数组后面
{
p=A[j]%2;
if(p==0)
{
B[s]=A[j];
s++;
}
if(p==1)
{
B[h]=A[j];
h++;
}
}
printf("输出变换后的数组元素:\n");//遍历输出数组元素
for(k=0;k<10;k++)
{
printf("%d
",B[k]);
}
}
第2个回答  推荐于2017-09-18
#include <stdio.h>//主函数
#define N 10
main()
{
int A[10],B[10],i,j,p,s=0,h=5,k;//定义数组名与变量名

printf("输入十个数字、回车键确定:\n");

for (i=0;i<10;i++)//遍历录入数组元素
{
scanf("%d",&A[i]);
}

for (j=0;j<10;j++)//将偶数放在数组前面,奇数放在数组后面
{
p=A[j]%2;
if(p==0)
{
B[s]=A[j];
s++;
}
if(p==1)
{
B[h]=A[j];
h++;
}
}
printf("输出变换后的数组元素:\n");//遍历输出数组元素
for(k=0;k<10;k++)
{
printf("%d ",B[k]);

}

}
第3个回答  2013-12-06
#include "stdio.h"
#define N 10
void main()
{
int i=0,j=0;
int a[N];
int b[N];

printf("输入%d个整数:\n",N);
for(i=0;i<N;i++)
scanf("%d",&a[i]);

for(i=0;i<N;i++)
if(a[i]%2==0)
{
b[j]=a[i];
j++;
}

for(i=0;i<N;i++)
if(a[i]%2!=0)
{
b[j]=a[i];
j++;
}

}
ps:不要鄙视我的方法,虽然算法很简单,但是完成了任务,而且效率比较高,缺点是占用资源较多
第4个回答  推荐于2017-09-13
你的do while语句有问题
#include "stdio.h"
void main()
{
int i,j,k,m,o,a[10];
printf("please input the number of digits\n");
scanf("%d",&o);
printf("they are:\n");
for(i=1;i<o+1;i++)
{scanf("%d",&a[i]);}

for(i=1,j=o;i<o+1;i++,j=o)
{if(a[i]%2==1)
{ k=a[j]%2;
while(k==1)
{j--;k=a[j]%2;}
if(j>=i)
{m=a[j];
a[j]=a[i];
a[i]=m;}
}
}

for(i=1;i<o+1;i++)
{printf("%d ",a[i]);}
}
我给你改了一下你试试看是不是这个思路~本回答被提问者和网友采纳
相似回答