在c语言中如何调用一个函数实现将数组奇数排列在左,偶数排列在右,这是我写的程序帮忙看一下,谢谢了

#include <stdio.h>#define N 10
void assort(int a[],int n)
{
//*********************************
int i=0,j=n,m,k,t;
while (i<j);
{
if(a[i]%2==0){
k=i;i++;
if(a[j]%2!=0){ m=j;
t=a[k];
a[k]=a[m];
a[m]=t;
j--;}
else j--;

}
else i++;

}

//=================================
}
int main()
{
int i,a[N];
//freopen("C5_3C.in", "r", stdin);
//freopen("C5_3C.out", "w", stdout);
for (i=0;i<N;i++)
scanf("%d",&a[i]);

//********************************** assort(a,N);
//==================================
for(i=0;i<N;i++)
printf("%d ",a[i]);
return 0;
}

你那个程序逻辑太混乱, 所以嵌套判断的时候,把自己也给绕进去了,其实就应该是a数组,两个变量i, j,i 对应奇数,j对应偶数,i从头,j从尾相向而行, 一偶一奇时,互换位置;否则偶数i++,奇数j--(继续相向而行),代码修改如下:
void assort(int a[], const unsigned int n)
{
int i, j, t;

i = 0;
j = n-1;
while (i<j)
{
if (a[i]%2 == 0 && a[j]%2 != 0)
{
t = a[i];
a[i] = a[j];
a[j] = t;
j--;
i++;
}
else if (a[j]%2 == 0)
j--;
else if (a[i]%2 !=0)
i++;
}
}
把接口稍微修改了一下,用了const unsigned int, 以表示n是不能变的;

其实你完全可以用C的标准库函数qsort, 自己写的compare函数调整一下即可。 如下:
int compare (const void * a, const void * b)
{
if ( (*(int*)a % 2 == 0) && (*(int*)b % 2 != 0) )
return 1;
if ( (*(int*)a % 2 != 0) && (*(int*)b % 2 == 0) )
return -1;
else
return ( *(int*)a - *(int*)b );
}

测试例子:
int main(int argc, char *argv[])
{
int data[] = {10, 8, 7, 6, 5, 2, 4, 3, 1, 9};
size_t data_len;
int i;

data_len = sizeof(data)/sizeof(data[0]);

qsort (data, data_len, sizeof(int), compare);
for (i=0; i<data_len; i++)
printf ("%d ",data[i]);

return 0;
}
输出:完全奇偶分开并且升序排序的结果:
1 3 5 7 9 2 4 6 8 10
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-11-25
#include <stdio.h>
#define N 10
void assort(int a[],int n)
{

int i=0,j=n,m,k,t;
while (i<j);
{
if(a[i]%2==0)
{
k=i; //把i++删了,在成功执行下面的if之前,i是不能变的
if(a[j]%2!=0)
{
m=j;
t=a[k];
a[k]=a[m];
a[m]=t;
j--;
i++;

}
else
j--;

}
else i++;
}

}
int main()
{
int i,a[N];

for (i=0;i<N;i++)
scanf("%d",&a[i]);
assort(a,N-1);//N是10,这个数组里是没有a[10](a[N])的

for(i=0;i<N;i++)
printf("%d ",a[i]);
return 0;
}
我也没调试,你自己调试一下吧,改动了,看的出来吧。
第2个回答  2017-12-18
如果是左偶数,右奇数呢

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网