voidreOrderArray(vector<int> &array){ int len = array.size(); for (int i=0; i<len; i++){ for (int j=len-1; j>i; j--){ if (array[j]%2==1&&array[j-1]%2==0) swap(array[j],array[j-1]); } } }
【法三】双指针,先找到最前的偶数i,在向后找第一个奇数j,其间每一个数向后移,j移到i的位置上。
可以改变相对关系
【法一】首尾指针
奇偶交换。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
vector<int> exchange(vector<int>& nums){ int len = nums.size(); int i=0,j=len-1; while(i<j){ while ((nums[i]&1)==1&&i<j){ i++; } while ((nums[j]&1)==0&&i<j){ j--; } if (i<j) swap(nums[i],nums[j]); } return nums; }
【法二】快慢指针
搜索每个奇数放到该去的位置。
1 2 3 4 5 6 7 8 9 10 11
vector<int> exchange(vector<int>& nums){ int len = nums.size(); int i=0,j=0; for (; j<len; j++){ if (nums[j]&1){ swap(nums[i],nums[j]); i++; } } return nums; }