# 题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分 。
# 解题思路
解法一
第一个指针start从数组第一个元素出发,向尾部前进
第二个指针end从数组的最后一个元素出发,向头部前进
start遍历到偶数,end遍历到奇数时,交换两个数的位置
当start>end时,完成交换
解法二
- 给数组重新设置排序规则
compare
compare
函数中用a
和b
的值对2
除余,然后返回b
的余数减a
的余数
# coding
解法一
function reOrderArray1(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;
}
解法一会改变原数组的相对顺序,若要保证相对顺序,则需要让两个指针同时从左侧开始。
解法二
function reOrderArray2(array) {
if (Array.isArray(array)) {
return array.sort(compare)
}
}
function compare(a, b) {
let rA = a % 2,
rB = b % 2;
return rA === rB ? 1 : rB - rA
}
测试代码
console.log(reOrderArray1([2, 6, 1, 3, 4, 5]))
// [5, 3, 1, 6, 4, 2]
console.log(reOrderArray2([2, 6, 1, 3, 4, 5]))
// [1, 3, 5, 2, 6, 4]
阅读全文