调整数组使奇数全部都位于偶数前面(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;
}

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


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

猜你喜欢

转载自blog.csdn.net/eric_qiushui/article/details/80550506