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

发布网友 发布时间:2022-04-26 15:19

我来回答

3个回答

热心网友 时间:2023-10-11 11:41

你那个程序逻辑太混乱, 所以嵌套判断的时候,把自己也给绕进去了,其实就应该是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

热心网友 时间:2023-10-11 11:41

#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;
}
我也没调试,你自己调试一下吧,改动了,看的出来吧。

热心网友 时间:2023-10-11 11:42

如果是左偶数,右奇数呢

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com