永发信息网

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

答案:3  悬赏:0  手机版
解决时间 2021-03-21 03:49
  • 提问者网友:放下
  • 2021-03-20 08:32
在c语言中如何调用一个函数实现将数组奇数排列在左,偶数排列在右,这是我写的程序帮忙看一下,谢谢了
最佳答案
  • 五星知识达人网友:轻熟杀无赦
  • 2021-03-20 08:53
你那个程序逻辑太混乱, 所以嵌套判断的时候,把自己也给绕进去了,其实就应该是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 {
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 printf ("%d ",data[i]);

return 0;
}
输出:完全奇偶分开并且升序排序的结果:
1 3 5 7 9 2 4 6 8 10
全部回答
  • 1楼网友:未来江山和你
  • 2021-03-20 10:46
如果是左偶数,右奇数呢
  • 2楼网友:轻熟杀无赦
  • 2021-03-20 10:22
#include
#define N 10
void assort(int a[],int n)
{
int i=0,j=n,m,k,t;
while (i{
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 scanf("%d",&a[i]);
assort(a,N-1);//N是10,这个数组里是没有a[10](a[N])的
for(i=0;i printf("%d ",a[i]);
return 0;
}
我也没调试,你自己调试一下吧,改动了,看的出来吧。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯