题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
思路
首先寻找第一个奇数,取出,然后将第一个奇数之前的元素全部往后移一位,讲找到的第一个奇数放在0号位置。
依次在第一个奇数之后的元素中寻找奇数,并做移动操作。就可以保证原来的相对顺序。
function reOrderArray(array)
{
let j=0;
let m=0;
for(let i=0;i<array.length;i++){
if(array[i]%2==1){
let temp=array[i];
let ti=i;
for(;ti>0;ti--){
array[ti]=array[ti-1]
}
array[0]=temp;
j=i;
break;
}
}
for(++j;j<array.length;j++){
if(array[j]%2==1){
let temp=array[j];
let tj=j;
for(;tj>m;tj--){
array[tj]=array[tj-1];
}
array[++m]=temp;
}
}
return array;
}
如果不需要考虑相对位置则:
思路
设定两个指针
第一个指针start从数组第一个元素出发,向尾部前进
第二个指针end从数组的最后一个元素出发,向头部前进
start遍历到偶数,end遍历到奇数时,交换两个数的位置
当start>end时,完成交换
代码
function reOrderArray(array) {
if (Array.isArray(array)) {
let start = 0;
let end = array.length - 1;
while (start < end) {
while (array[start] % 2 === 1) {
start++;
}
while (array[end] % 2 === 0) {
end--;
}
if (start < end) {
[array[start], array[end]] = [array[end], array[start]]
}
}
}
return array;
}