首页 > 试题广场 >

整数奇偶排序

[编程题]整数奇偶排序
  • 热度指数:22606 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
输入10个整数,彼此以空格分隔。重新排序以后输出(也按空格分隔),要求: 1.先输出其中的奇数,并按从大到小排列; 2.然后输出其中的偶数,并按从小到大排列。

输入描述:
任意排序的10个整数(0~100),彼此以空格分隔。


输出描述:
可能有多组测试数据,对于每组数据,按照要求排序后输出,由空格分隔。

1. 测试数据可能有很多组,请使用while(cin>>a[0]>>a[1]>>...>>a[9])类似的做法来实现;
2. 输入数据随机,有可能相等。
示例1

输入

4 7 3 13 11 12 0 47 34 98

输出

47 13 11 7 3 0 4 12 34 98
  • qsort升序排序
  • 先反向输出奇数,再正向输出偶数
    #include <stdio.h>
    #include <stdlib.h>
    
    int n = 10;
    int num[11];
    
    int cmp(const void* lhs, const void* rhs)
    {
        return *(int*)lhs - *(int*)rhs;
    }
    
    int main()
    {
        int i = 0;
        while(scanf("%d", &num[i]) != EOF)
        {
            i++;
            if (i == 10)
            {
                i = 0;
                qsort(num, n, sizeof(int), cmp);
                for (int j = 9; j >= 0; j --)
                    if (num[j] & 1)
                        printf("%d ", num[j]);
                for (int j = 0; j < n; j ++)
                    if (!(num[j] & 1))
                        printf("%d ", num[j]);
                puts("");
            }       
        }
        return 0;
    }

发表于 2022-03-01 21:11:44 回复(0)
改变compare的比较条件进行qsort排序
#include <stdio.h>
#include <stdlib.h>

int cmp(const void *x,const void *y)
{
    int a=*(int*)x;
    int b=*(int*)y;
    if(a%2==0&&b%2==0)
    {
        return a-b;
    }else if(a%2==1&&b%2==1)
    {
        return b-a;
    }else{
        return (a%2==1)?-1:1;
    }
}

int main()
{
    int i;
    int a[10];
    while(scanf("%d",&a[0])!=EOF)
    {
        for(i=1;i<10;i++)
        {
            scanf("%d",&a[i]);
        }
        qsort(a,10,sizeof(a[0]),cmp);
        for(i=0;i<10;i++)
        {
            printf("%d ",a[i]);
        }
    }
    return 0;
}

发表于 2022-02-22 15:28:59 回复(1)
#include<stdio.h>
int main() {
    int t;
    int a[101];
    memset(a, -1, sizeof(a));
    for (int i = 0; i < 10; i++) {
        scanf("%d", &t);
        a[t]++;
    }
    for (int i = 99; i >= 1; i -= 2) {
        if (a[i] != -1)
          for(int j=-1;j<a[i];j++)
            printf("%d ", i);
    }
    for (int i = 0; i <= 100; i += 2) {
        if (a[i] != -1)
          for(int j=-1;j<a[i];j++)
            printf("%d ", i);
    }
    return 0;
}
发表于 2022-01-11 15:35:26 回复(0)