第二道:对一个数组,将数组中偶数从大到小排序,奇数从小到大排序,奇数和偶数交叉着放且输出数组第一位放奇数 若奇数和偶数不等长,则把剩下的直接放到数组中。
-------------------思路:先进行奇偶判断,得到奇数和偶数数组。然后对两数组排序,进行长度判断,最后组织数据。
#include<stdio.h>
#include<malloc.h>
void jiou(int a[],int n)
{
int *p1;
int *p2;
int i,j;
int k=0;
int kk=0;
int count1=0;
int count2=0;
int temp;
int temp2;
int m=0;
p1=(int*)malloc(sizeof(int)*n);
p2=(int*)malloc(sizeof(int)*n);
for(i=0;i<n;i++)
{
p1[i]=0;
p2[i]=0;
}
for(i=0;i<n;i++)
{
if((a[i]%2)!=0)
{p2[kk++]=a[i];}
else
{p1[k++]=a[i];}
}
count1=k;
count2=kk;
for(i=0;i<count2;i++)
printf("%3d",p2[i]);
printf("\n");
for(i=0;i<count2;i++)
for(j=0;j<count2-1-i;j++)
if(p2[j]>p2[j+1])
{temp2=p2[j];p2[j]=p2[j+1];p2[j+1]=temp2;}
for(i=0;i<count2;i++)
printf("%3d",p2[i]);
printf("\n");
for(i=0;i<count1;i++)
printf("%3d",p1[i]);
printf("\n");
for(i=0;i<count1;i++)
for(j=0;j<count1-i;j++)
if(p1[j]<p1[j+1])
{temp=p1[j];p1[j]=p1[j+1];p1[j+1]=temp;}
for(i=0;i<count1;i++)
printf("%3d",p1[i]);
printf("\n");
if(count1>count2)
{
for(i=0;i<count2;i++)
{
a[i+m]=p2[i];
a[i+1+m]=p1[i];
m=m+1;
}
for(i=0;i<count1-count2;i++)
a[2*count2+i]=p1[i+count2];
}
else
{
for(i=0;i<count1;i++)
{
a[i+m]=p2[i];
a[i+1+m]=p1[i];
m=m+1;
}
for(i=0;i<count2-count1;i++)
a[2*count1+i]=p2[i+count1];
}
for(i=0;i<n;i++)
printf("%3d",a[i]);
printf("%\n");
}
void main()
{
int a[10]={2,3,14,6,2,15,12,14,4,11};
jiou(a,10);
}
运行结果:
3 15 11
3 11 15
2 14 6 2 12 14 4
14 14 12 6 4 2 2
3 14 11 14 15 12 6 4 2 2