您的位置:首页 > 编程语言 > C语言/C++

华为:对一个数组,将数组中偶数从大到小排序,奇数从小到大排序,奇数和偶数交叉着放,且输出数组第一位放奇数

2013-04-16 21:06 513 查看
/*
对一个数组,将数组中偶数从大到小排序,奇数从小到大排序,奇数和偶数交叉着放,
且输出数组第一位放奇数
若奇数和偶数不等长,则把剩下的直接放到数组中。
*/
#include <cstdio>
#include <cstdlib>
#include <cstring>
int comp(const void *p, const void *q)
{
return (*(int *)p - *(int *)q);
}
void sorts(int a[],int n)
{

int odd=0,even=0;
int even_num=0,odd_num=0;
int *r =a;
int even_arr[100]={0};
int odd_arr[100]={0};
int *p_even = even_arr;
int *p_odd = odd_arr;
int *p = even_arr;
int *q = odd_arr;
for(int i=0;i<n;i++)
{
if(a[i]%2 == 0)//偶数
{
even_num++;
*p_even++ = a[i];
}
else//奇数
{
odd_num++;
*p_odd++ = a[i];
}
}

qsort(even_arr,even_num,sizeof(even_arr[0]),comp);
//偶数从大到小排列
qsort(odd_arr,odd_num,sizeof(odd_arr[0]),comp);
//奇数从小到大排列
while(odd<odd_num && even<even_num)
{
*r++ = *q++;
odd++;
*r++ = *p++;
even++;
}
while(even!=even_num&&odd!=odd_num)
{
if(even<even_num)
{
*r++ = *p++;
even++;
}

while(odd<odd_num)
{
*r++ = *q++;
odd++;
}
}

}
int main(/*int argc, char **argv*/)
{
int i;
int a[]={2,0,3,9,4,10,7,11,15,22,66,31,21,87,99,101,177};
int n=sizeof(a)/sizeof(a[0]);
sorts(a,n);
for(i=0;i<n;i++)
printf("%d ",a[i]);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  CC++ 笔试面试
相关文章推荐