#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);
}
--------------------------------------------------