怎么将数组中值为偶数的元素进行升序排列,而且奇数位置不变
#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;
}
找出偶数,记录下标,偶数排序,偶数放入原数组
#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;
}