各位帮我解决一下这个

给定n个整数的序列,要求对其重新排序。排序要求:1.奇数在前,偶数在后;2.奇数按从大到小排序;3.偶数按从小到大排序。

输入说明
第一行输入一个整数n, 第二行包含n个整数,彼此以一个空格分开,每个整数的范围是大于等于0,小于等于100。
输出说明
按照要求排序后输出一行,包含排序后的n个整数,数与数之间以一个空格分开。


#include <stdio.h>
#include <stdlib.h>

void sort(int *a, int len)
{
    for(int i = 0; i < len - 1; i++)
        for(int j = i + 1; j < len; j++)
            if(a[i] < a[j])
            {
                a[i] += a[j];
                a[j] = a[i] - a[j];
                a[i] = a[i] - a[j];
            }
}

int main()
{
    int n;
    scanf("%d", &n);

    int *lista = (int *)calloc(n, sizeof(int));
    int *listb = (int *)calloc(n, sizeof(int));

    int i = 0, ji = 0, ou = 0, t;

    while(i < n)
    {
        scanf("%d", &t);

        if(t % 2 == 0)
            listb[ou++] = t;
        else
            lista[ji++] = t;

        i++;
    }

    sort(lista, ji);
    sort(listb, ou);

    for(i = 0; i < ou; i++)
        lista[ji + i] = listb[ou - i - 1];

    for(i = 0; i < n; i++)
        printf("%d ", lista[i]);

    return 0;
}

https://blog.csdn.net/m0_62305442/article/details/121366075