题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分
分析如下图:
代码如下:
#include<stdio.h>
void Swap(int* x, int* y)
{
int tmp = *x;
*x = *y;
*y = tmp;
}
void oddtoeven(int* arr, int len)
{
if (arr == NULL || len <= 0)
{
printf("arr is NULL\n");
}
int begin = 0, end = len - 1;
while (begin <= end)
{
//直到begin指向偶数
while (begin <= end && (arr[begin] % 2) == 1)
++begin;
//直到end指向奇数
while (begin <= end && (arr[end] % 2) == 0)
--end;
//交换俩个数后,begin与end都指向下一个值
Swap(&arr[begin++], &arr[end--]);
}
}
//打印数组
void Print(int* arr, int len)
{
if (arr == NULL || len <= 0)
{
printf("arr is NULL\n");
}
for (int i = 0; i < len; ++i)
{
printf("%d ", arr[i]);
}
printf("\n");
}
//测试如下:
int main()
{
int arr[10] = { 25, 4, 7, 8, 10, 5, 3, 2, 9, 12 };
Print(arr, sizeof(arr) / sizeof(arr[0]));
oddtoeven(arr, sizeof(arr)/sizeof(arr[0]));
Print(arr, sizeof(arr) / sizeof(arr[0]));
return 0;
}