开发者社区> 问答> 正文

一道C语言小题目,能不能更简洁呢

题目如下: 输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。 如输入数组1,4,2,7,8,9,输出结果为1,7,9,2,4,8。

#include <stdio.h>

#define N 10

int is_odd(int num)
{
    if(num % 2 != 0)
    return 1;
}

void init(int *array)
{
    int i;
    srand(time(NULL));
    for(i = 0; i < N; i ++)
        array[i] = rand() % 100;
}

void swap(int *i, int *j)
{
    int tmp;

    tmp = *i;
    *i = *j;
    *j = tmp;
}

void print(int *array)
{
    int i;

    for(i = 0; i < N; i ++)
        printf("%d ", array[i]);
    printf("\n");
}

void sort(int *array)
{
    int i = 0, j = N - 1;

    for(i = 0; i < j; i ++){
        if(! is_odd(array[i]))
            for(j = N - 1; j > i; j --)
                if(is_odd(array[j])){
                    swap(array + i, array + j);
                    break;  
                }
    }
}

int main(int argc,  char ** argv)
{
    int array[N];

    init(array);
    print(array);
    sort(array);
    print(array);   

    return 0;
}

展开
收起
a123456678 2016-06-06 11:14:38 1943 0
1 条回答
写回答
取消 提交回答
  • void rearrange(int *a, int n)
    {
        int i = 0, j = n - 1, t = a[0];
        while (i != j)
        {
            while (i < j && ((a[j] & 1) == 0))
                j--;
            if (i < j)
                a[i] = a[j], i++;
            while (i < j && ((a[i] & 1) == 1))
                i++;
            if (i < j)
                a[j] = a[i], j--;
        }
        a[i] = t;
    }
    2019-07-17 19:27:57
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
为什么要学函数式编程? 立即下载
Go语言路上踩过的坑 立即下载
用RxSwift写易维护易读的愉悦代码 立即下载

相关实验场景

更多