给你一个数组,先从小到大输出奇数位的数,再从小到大输出偶数位的数。求函数解法!

我写了一个代码,其中偶数位和奇数位有着相似的操作,问:写一个函数来实现两次相似的操作!

#include <stdio.h>
int main() {
    int a[1000], b[1000], c[1000], i, j, k, n, x;
    scanf("%d", &n);
    //把数字存进a[]
    for(i = 0; i < n; i++) {
        scanf("%d", &a[i]); //a[0]~a[n-1]
    }
    //把奇数位存进b[]
    for(i = 0, j = 0; i < n; i = i+2, j++) {
        b[j] = a[i]; //b[0]~b[j-1]
    }

    //把偶数位存进c[]
    for(i = 1, k = 0; i < n; i = i+2, k++) {
        c[k] = a[i]; //c[0]~c[k-1]
    }

    //b[]的冒泡排序
    for(i = 0; i < j-1; i++)//一共j个数,排j-1次
    {
        for(x = 0; x < j-i-1; x++) {
            if(b[x] > b[x+1]) {
                int t = b[x+1];
                b[x+1] = b[x];
                b[x] = t;
            }
        }
    }
    //c[]的冒泡排序
    for(i = 1; i < k; i++)//排k-1次
    {
        for(x = 0; x < k-i; x++)//比较k-i次
        {
            if(c[x] > c[x+1]) {
                int t = c[x+1];
                c[x+1] = c[x];
                c[x] = t;
            }
        }
    }
    for(i = 0; i < j; i++)//输出奇数列
    {
        printf("%d ", b[i]);
    }
    printf("\n");
    for(i = 0; i < k; i++)//输出偶数列
    {
        printf("%d ", c[i]);
    }
    return 0;
}

#include <stdio.h>
void fun(int *a,int n,int s)
{
    int b[1000];
    int i,j,x;
     for(i = s, j = 0; i < n; i = i+2, j++) {
        b[j] = a[i]; 
    }
    for(i = 0; i < j-1; i++)
    {
        for(x = 0; x < j-i-1; x++) {
            if(b[x] > b[x+1]) {
                int t = b[x+1];
                b[x+1] = b[x];
                b[x] = t;
            }
        }
    }
     for(i = 0; i < j; i++)
    {
        printf("%d ", b[i]);
    }
    printf("\n");
}

int main() {
    int a[1000],n,i;
    scanf("%d", &n);
    for(i = 0; i < n; i++) {
        scanf("%d", &a[i]); 
    }
    fun(a,n,0);
    fun(a,n,1);

    return 0;
}

把相似的代码抽取出来放到函数,定义参数控制逻辑。

void fun(int a[],int b[],int n,int num)
{
  int i,j,x;
  for(i = num,j = 0;i < n;i = i+2, j++) {
        b[j] = a[i];     //b[0]~b[j-1]
    }
for(i = 1; i < j; i++)   //排j-1次
    {
        for(x = 0; x < j-i-1; x++)  //比较j-i-1次
        {
            if(c[x] > c[x+1]) {
                int t = c[x+1];
                c[x+1] = c[x];
                c[x] = t;
            }
        }
    }
    for(i = 0; i < j; i++)
    {
        printf("%d ", b[i]);
    }
}