方法一:一般方法:

代码如下:

 1 int* exchange(int* nums, int numsSize, int* returnSize){
 2     int *new=(int *)malloc(sizeof(int)*numsSize);//定义一个新数组用来存放调整后的数组
 3     int index=0,k=numsSize-1;
 4     for(int i=0;i<numsSize;i++)
 5     {
 6         if(nums[i]%2!=0)
 7         {
 8             new[index++]=nums[i];    //新数组从头开始存放奇数
 9         }
10         else
11         {
12             new[k]=nums[i];                //新数组从尾部开始存放偶数
13             k--;
14         }
15     }
16     *returnSize=numsSize;
17     return new;
18 
19 }

方法二:双指针

1、定义一个left,令left=0,指向第一个元素,定义一个right,令right=numsSize-1指向最后一个元素。

2、left向右移,直到指向偶数

3、right向左移,直到指向奇数

4、交换nums[left]和nums[right]的值

5、重复以上操作,直到left==right.

 1 void swap(int* nums,int i,int j)    //交换函数,交换奇数和偶数
 2 {
 3     int temp=nums[i];
 4     nums[i]=nums[j];
 5     nums[j]=temp;
 6 }
 7 int* exchange(int* nums, int numsSize, int* returnSize){
 8     int left=0,right=numsSize-1;
 9     while(left<right)
10     {
11         if(nums[left]%2!=0)
12         {
13             left++;
14             continue;
15         }
16         if(nums[right]%2==0)
17         {
18             right--;
19             continue;
20         }
21         if ((nums[left] % 2) == 0&& (nums[right] % 2) == 1) {
22             swap(nums,left,right);
23             left++;
24             right--;
25 
26         }
27     }
28     *returnSize=numsSize;
29     return nums;
30 }

方法三:快慢指针

使用快慢指针
慢指针:定位偶数
快指针:定位奇数
两指针的数值进行交换

例如:
1,2,3,4
1,2(slow),3(fast),4
1,3,2(slow),4(fast)
end;

作者:sugar-31
链接:https://leetcode-cn.com/problems/diao-zheng-shu-zu-shun-xu-shi-qi-shu-wei-yu-ou-shu-qian-mian-lcof/solution/kuai-man-zhi-zhen-zai-yuan-shu-zu-shang-jin-xing-x/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 1 void swap(int* nums,int i,int j) 
 2 {
 3     int temp=nums[i];
 4     nums[i]=nums[j];
 5     nums[j]=temp;
 6 }
 7 int* exchange(int* nums, int numsSize, int* returnSize){
 8     int slow=0;
 9     //求第一个偶数
10     while(slow<numsSize&&nums[slow]%2!=0)
11     {
12         slow++;
13     }
14     int fast=slow+1;
15     while(fast<numsSize)
16     {
17         //找奇数
18         if(nums[fast]%2!=0)
19         {
20             swap(nums,slow,fast);    //奇数和偶数交换
21             slow++;
22         }
23         fast++;
24     }
25     *returnSize=numsSize;
26     return nums;
27 }