输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分。
我们需要定义一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分。
我们可以选择用两个指针left和right,left从左边在循环中往右走,直到遇到偶数跳出循环;同理,我们定义一个 right 指针变量,来从右边开始找奇数,找到就跳出 while 循环。
然后我们将找到的一组奇数(*left)偶数(*right)交换。
以上操作在循环中进行( 交换这一组之后,再继续操作其他未被指针指过的数,一个 while 循环),直到left不小于right
void charge(int arr[],int sz)
{
int* left = arr;
int* right = arr + sz - 1;
while (left < right)
{
while (((left < right) && (*left) % 2 != 0))
{
left++;
}
while (((left < right) && (*right) % 2 == 0))
{
right--;
}
if (left < right)
{
int tmp = *left;
*left = *right;
*right = tmp;
}
}
}
int main()
{
int arr[5] = {1,2,3,4,5};
int sz = (sizeof(arr)) / (sizeof(arr[0]));
charge(arr, sz);
for (int i = 0; i < sz; i++)
{
printf("%d", arr[i]);
}
return 0;
}