输入一个整数数组,实现一个函数,
来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,
所有的偶数位于数组的后半部分
看到此题首先要画图分析:
有了图纸的分析写代码就方便多了,下面展示代码:
#include<stdio.h>
void print(int * p, int sz) // 打印函数
{
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d ", *(p + i));
}
}
void diandao(int* p, int r) // 颠倒函数
{
int* left = p;
int* right = p + r;
while (left < right)
{
if (left < right && (*left % 2 == 1)) // 如果左面是单数就向后走
{
left++;
}
if (left < right && (*right % 2 == 0)) //如果右面是双数就向前走
{
right--;
}
//下面交换左右的值
int tmp = *left;
*left = *right;
*right = tmp;
}
}
int main()
{
int arr[10] = { 1,2,3,4,5,19,7,8,9,10 };
int right = sizeof(arr) / sizeof(arr[0]) - 1;
diandao(arr, right); //调用颠倒函数
print(arr, right); // 调用打印函数
return 0;
}
这样就实现了调整数组中奇数占前半部分,偶数占后半部分的功能。