当前位置: 代码迷 >> C语言 >> [求助]晕了,看看这个奇偶排序的程序吧
  详细解决方案

[求助]晕了,看看这个奇偶排序的程序吧

热度:142   发布时间:2006-03-17 02:05:00.0
看~
----------------解决方案--------------------------------------------------------

我一会用你的思路写个,我这太麻烦
[CODE]
#include <stdio.h>
#include <conio.h>
#include <malloc.h>
#define N 10
void main()
{
int *a,i,j;

a=(int *) malloc (N*sizeof(int));
for(i=0;i<N;i++)
{
scanf("%d",&a[i]);
if(a[i]==-1)
i--;
}


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

}
if(j==N)
{
printf("%5d",a[i]);
a[i]=-1;
}
}
if(i==N-1)
i=-1;
for(j=0;j<N&&a[j]%2!=0;j++);
if(j==N)
break;
}

for(i=0;i<N;i++)
{
if(a[i]%2!=0&&a[i]!=-1)
{
for(j=0;j<N;j++)
{
if(a[j]%2!=0&&a[j]<a[i]&&a[j]!=-1)
break;
}
if(j==N)
{
printf("%5d",a[i]);
a[i]=-1;
}
}
if(i==N-1)
i=-1;
for(j=0;j<N&&a[j]==-1;j++);
if(j==N)
break;
}

free(a);
getch();
}


[/CODE]


----------------解决方案--------------------------------------------------------
呵呵,辛苦版主啦
都那么晚了,还在拼搏
----------------解决方案--------------------------------------------------------
以下是引用feng1256在2006-3-17 2:06:00的发言:

我一会用你的思路写个,我这太麻烦
[CODE]
#include <stdio.h>
#include <conio.h>
#include <malloc.h>
#define N 10
void main()
{
int *a,i,j;

a=(int *) malloc (N*sizeof(int));
for(i=0;i<N;i++)
{
scanf("%d",&a[i]);
if(a[i]==-1)
i--;
}


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

}
if(j==N)
{
printf("%5d",a[i]);
a[i]=-1;
}
}
if(i==N-1)
i=-1;
for(j=0;j<N&&a[j]%2!=0;j++);
if(j==N)
break;
}

for(i=0;i<N;i++)
{
if(a[i]%2!=0&&a[i]!=-1)
{
for(j=0;j<N;j++)
{
if(a[j]%2!=0&&a[j]<a[i]&&a[j]!=-1)
break;
}
if(j==N)
{
printf("%5d",a[i]);
a[i]=-1;
}
}
if(i==N-1)
i=-1;
for(j=0;j<N&&a[j]==-1;j++);
if(j==N)
break;
}

free(a);
getch();
}





[/CODE]



这个确实有够复杂的,在没有注释的情况下,要看懂还得花费不少时间呢
晚了,先睡觉去
感激版主的帮助
----------------解决方案--------------------------------------------------------
一会试写简单的~ 那个单数组可以实现太麻烦了,没什么用,就没写注释
----------------解决方案--------------------------------------------------------

单一数组实现的,这个好些
[CODE]
#include <stdio.h>
#include <conio.h>
#include <malloc.h>
#define N 10
void main()
{
int *a,i,j,m,k=0,n=0;

a=(int *) malloc (N*sizeof(int));
for(i=0;i<N;i++)
{
scanf("%d",&m);
if(m%2==0)
{
a[n]=m;
if(i!=0)
{
for(j=n-1;j>=0&&a[j]>m;j--)
a[j+1]=a[j];
a[j+1]=m;
}
n++;
}
else
{
a[N-1-k]=m;
if(i!=0)
{
for(j=N-k;j<N&&a[j]<m;j++)
a[j-1]=a[j];
a[j-1]=m;
}
k++;
}
}
for(i=0;i<N;i++)
printf("%5d",a[i]);
getch();
}



[/CODE]


----------------解决方案--------------------------------------------------------

刚睡醒~这个又忘了写注释

思路很简单~ 分别用插入法 从数组首 数组尾 存入偶数 和奇数

吃饭去了


----------------解决方案--------------------------------------------------------
这个应该很简单的
怎么回有那么多代码
另外
我觉得楼主的错误很多
----------------解决方案--------------------------------------------------------
以下是引用feng1256在2006-3-17 6:20:00的发言:

刚睡醒~这个又忘了写注释

思路很简单~ 分别用插入法 从数组首 数组尾 存入偶数 和奇数

吃饭去了

呵呵,这个简单很多,也很容易明白
真是辛苦版主了


----------------解决方案--------------------------------------------------------
怎么这么复杂,还用到了动态分配,我还不怎么懂,不过我觉得楼主的思路不错,挺模块化的,只不过在实现上有问题
----------------解决方案--------------------------------------------------------
  相关解决方案