1.双数组解法
开辟新数组保存法:创建两个数组,一个用来存奇数,一个用来存偶数,最后合并
function reOrderArray(array)
{
var ji = [],ou = [];
for(let i = 0;i < array.length;i++){
if(array[i] % 2 === 0)
ou.push(array[i]);
else
ji.push(array[i]);
}
var newA = ji.concat(ou);
return newA;
}
2.双指针解法
我们需要两个指针i,j
初始化i = 0,j = i + 1;
如果array[i]为奇数,i++
如果array[i]为偶数,i不动,j从i+1开始前进寻找下一个奇数
当找到下一个奇数时,可知从i到j-1都是偶数,我们需要把这些偶数整体后移一位,把array[j]的值赋值给array[i],然后i再往后寻找下一个偶数
function reOrderArray(array){
var len = array.length;
if(len <= 1){ // 数组空或长度为1
return array;
}
var i = 0;
while(i < len){
var j = i + 1;
if(array[i] % 2 == 0){ // a[i]为偶数,j前进,直到替换
while(array[j] % 2 == 0){ // j为偶数,前进
if(j == len-1)// i为偶数,j也为偶数,一直后移到了末尾,证明后面都是偶数
return array;
j++;
}
// 此时j为奇数
var count = j - i;
var temp = array[i];
array[i] = array[j];
while(count > 1){
array[i + count] = array[i + count - 1];//数组后移
count --;
}
array[i + 1] = temp;
}
i++;
} // write code here
}