调整数组使奇数全部都位于偶数前面(C语言)


题目:

输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分。


思想:
前后两个指针,Start指针指向数组第一个元素,End指针指向数组最后一个元素,
Start指针从前往后找到第一个偶数停下,End指针从后往前找到第一个奇数停下,如果Start < End,就交换两指针指向


代码实现:

void _swap(int *a, int *b)
{
    int temp = *a;
    *a = *b;
    *b = temp;
}


void UnevenNumberInFront_EvenNumberInLast(int *array, int size)
{
    int Start = 0;
    int End = 0;
    if (array == NULL || size <= 0)
    {
        return;
    }

    Start = 0;
    End = size - 1;

    while (Start < End)
    {
        while ((array[Start] % 2 != 0) && (Start < End))
        {
            Start++;
        }

        while ((array[End] % 2 == 0) && (Start < End))
        {
            End--;
        }

        _swap(&(array[Start]), &(array[End]));
    }
}

测试:

void TestNumber()
{
    int i = 0;
    int array[] = { 2, 4, 6, 8, 0, 1, 3, 5, 7, 9 };
    int size = sizeof(array) / sizeof(array[0]);

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

    UnevenNumberInFront_EvenNumberInLast(array, size);
    printf("After:  ");
    for (i = 0; i < size; i++)
    {
        printf("%d ", array[i]);
    }
    printf("\n");
}

int main()
{
    TestNumber();
    system("pause");
    return 0;
}

测试结果:
这里写图片描述


如有问题,欢迎探讨,谢谢您!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值