输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组的前半部分,所有偶数在数组的后半部分。
这题应该不算太难吧?我们只需遍历数组就能写出,都不需要方法,只需暴力破解。
首先我们遍历数组,遇到偶数就进入循环,然后从当前元素的后一个开始遍历,直到遇到奇数或数组遍历完为止,如果后面有奇数与当前的偶数交换,如果没有,我们可以直接停止遍历,因为偶数已经都被放到前面去了,所以我们直接返回就行。
int* exchange(int* nums, int numsSize, int* returnSize)
{
*returnSize = numsSize;
int i = 0;
for (i = 0; i < numsSize; i++)
{
if (nums[i] % 2 == 0)
{
int j = 0;
for (j = i + 1; j < numsSize; j++)
{
if (nums[j] % 2 == 1)
{
int tmp = nums[j];
nums[j] = nums[i];
nums[i] = tmp;
break;
}
}
if (j == numsSize)
{
break;
}
}
}
return nums;
}
如果觉得这太慢了,不得劲,我们也可以定义创建一个数组arr和两个变量并初始化,下面代码较简单,不需要说明也能看懂。
int* exchange(int* nums, int numsSize, int* returnSize) {
*returnSize = numsSize;
if (numsSize == 0)
return NULL;
int arr[numsSize];//变长数组如果跑不动,可以换成malloc,顺带一提变长数组是不能初始化哦
int i = 0;
int left = 0;
int right = numsSize - 1;
for (i = 0; i < numsSize; i++)
{
if (nums[i] % 2 == 0)
{
arr[right] = nums[i];
right--;
}
else
{
arr[left] = nums[i];
left++;
}
}
for (i = 0; i < numsSize; i++)
{
nums[i] = arr[i];
}
return nums;
}