JavaScript数组奇偶数排序,奇数在前,偶数在后,要求不新建数组。

例如:[1, 2, 3, 4, 5]排序后:1, 3, 5, 2, 4
注意:要求不新建数组,即在原数组的基础上更改。

阅读 5.9k
4 个回答

如果对奇数间的顺序,和偶数间的顺序不需要和原来保持一致的话,可以参考快排的思想
一个指针从左往右搜,一个指针从右往左搜,当左边找到偶数,右边找到奇数时,交换两个数,然后继续查找,直到两个指针相同

冒泡排序

let arr = [1, 2, 3, 4, 5, 7, 9, 10, 13, 18];

for (let i = 0; i < arr.length - 1; i++) {
    for (let j = 0; j < arr.length - i - 1; j++) {
        let tmp = arr[j];
        if (tmp % 2 === 0 && arr[j + 1] % 2 !== 0) {
            arr[j] = arr[j + 1];
            arr[j + 1] = tmp;
        }
    }
}

console.log('arr', arr);//[ 1, 3, 5, 7, 9, 13, 2, 4, 10, 18 ]

我一开始也以为sort会创建新数组,原来不会

let arr = [1, 2, 3, 4, 5, 7, 9, 10, 13, 18];

arr.sort((a, b) => {
    if (a % 2 === 0) {
        if (b % 2 !== 0) {
            return 1;
        }
        return 0;
    } else
        return -1
})

console.log('arr', arr);//[ 1, 3, 5, 7, 9, 13, 2, 4, 10, 18 ]

测试了一下sort是真的快,看样子以后不需要用原生的。Array.prototype.sort 排序算法

[1, 2, 3, 4, 5].sort(function(a, b){ / 里面就不写了 / })

arr.sort(a => a%2 === 0); 但这种是不稳定排序, 因为sort内部使用快排, 快排本身不稳定.
需要稳定排序的话就归并或者冒泡这些, 判断条件改一下即可

推荐问题
宣传栏