思路:参考快速排序
i++
往前走碰到偶数停下来,j = i+1
- 若
a[j]
为偶数,j++
前进,直到碰到奇数a[j]
对应的奇数插到a[i]位置,j
经过的j-i
个偶数依次后移
- 如果
j==len-1
时还没碰到奇数,证明i
和j
之间都为偶数了,完成整个移动
class Solution { public: void reOrderArray(vector<int> &array) { int len = array.size(); if(len <= 1){ // 数组空或长度为1 return; } int i = 0; while(i < len){ int j = i + 1; if(array[i]%2 == 0){ // a[i]为偶数,j前进,直到替换 while(array[j]%2 == 0){ // j为偶数,前进 if(j==len-1)// i为偶数,j也为偶数,一直后移到了末尾,证明后面都是偶数 return; j++; } // 此时j为奇数 int count = j-i; int temp = array[i]; array[i] = array[j]; while(count>1){ array[i+count] = array[i+count-1];//数组后移 count--; } array[i+1] = temp; } i++; } } };