请编写程序:有a[10]数组存储10个随机十进制整数,将数组中值为偶数的元素进行升序排序,注意奇数位置不变

怎么将数组中值为偶数的元素进行升序排列,而且奇数位置不变

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

void swap(int *a, int *b)
{
    int t = *a;
    *a = *b;
    *b = t;
}

void sort_even_numbers(int *a, int n)
{
    for (int i = 0; i < n - 1; i++)
    {
        if (a[i] % 2 != 0)
            continue;
        for (int j = i + 1; j < n; j++)
        {
            if (a[j] % 2 != 0)
                continue;
            if (a[i] > a[j])
                swap(&a[i], &a[j]);
        }
    }
}

int main()
{
    int a[10];
    srand(time(NULL));
    for (int i = 0; i < 10; i++)
        a[i] = rand() % 100;
    printf("before: ");
    for (int i = 0; i < 10; i++)
        printf("%2d ", a[i]);
    printf("\n");
    sort_even_numbers(a, 10);
    printf("after : ");
    for (int i = 0; i < 10; i++)
        printf("%2d ", a[i]);
    printf("\n");
    return 0;
}

找出偶数,记录下标,偶数排序,偶数放入原数组

img

#include<stdio.h>
void p(int t[],int n)
{
    while(n--)
    {
        printf("%d ",t[10-n-1]);
    }
    printf("\n");
}
void f(int t[],int n)
{
    int j,k,tem,h=0;
    int xb[10],f[10];
    for(j=0; j<n; j++)
    {
        if(t[j]%2==0)
        {
            f[h]=t[j];
            xb[h]=j;
            h++;
        }
    }
    for(k=0; k<h-1; k++)
        for(j=0; j<h-1-k; j++)
            if(f[j]>f[j+1])
            {
                f[j]=f[j]^f[j+1];
                f[j+1]=f[j]^f[j+1];
                f[j]=f[j]^f[j+1];
            }
    for(j=0; j<h; j++)
    {
        t[xb[j]]=f[j];
    }
}
int main()
{
    int t[10],j;
    for(j=0; j<10; j++)
        t[j]=10-j;
    p(t,10);
    f(t,10);
    printf("偶数排序\n");
    p(t,10);
    return 0;
}