例如:[1, 2, 3, 4, 5]
排序后:1, 3, 5, 2, 4
注意:要求不新建数组,即在原数组的基础上更改。
例如:[1, 2, 3, 4, 5]
排序后:1, 3, 5, 2, 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 排序算法
8 回答4.6k 阅读✓ 已解决
6 回答3.3k 阅读✓ 已解决
5 回答2.8k 阅读✓ 已解决
5 回答6.3k 阅读✓ 已解决
4 回答2.2k 阅读✓ 已解决
4 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
如果对奇数间的顺序,和偶数间的顺序不需要和原来保持一致的话,可以参考快排的思想
一个指针从左往右搜,一个指针从右往左搜,当左边找到偶数,右边找到奇数时,交换两个数,然后继续查找,直到两个指针相同