9、调整数组顺序使奇数位于偶数前面------------>剑指offer系列

题目描述

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。

思路

首先寻找第一个奇数,取出,然后将第一个奇数之前的元素全部往后移一位,讲找到的第一个奇数放在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; }


猜你喜欢

转载自www.cnblogs.com/QianDingwei/p/10927718.html