# 题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
# 测试用例
用例1:
- 输入:1,2,3,4,5,6
- 输出: [ 1, 3, 5, 2, 4, 6 ]
用例2:
- 输入: 2,4,6,1,8,3
- 输出:[ 1, 3, 2, 4, 6, 8 ]
# 代码实现
/*
13.调整数组顺序使奇数位于偶数前面
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,
使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,
并保证奇数和奇数,偶数和偶数之间的相对位置不变。
*/
// 输入
// 测试用例
// 1,2,3,4,5,6
// 0, 2, 4
// 2,4,6,1,8,3
var __reardline = require("readline-sync");
__reardline.setDefaultOptions({ prompt: "" });
var readline = __reardline.prompt;
console.log("请输入数组: ");
const array = readline().split(",").map(Number);
// 额外空间
function reOrderArray(array){
let a1 = []; // 存放奇数
let a2 = []; // 存放偶数
for(let a of array){
if(a % 2 !== 0){
a1.push(a);
}
else{
a2.push(a);
}
}
return [...a1, ...a2];
}
console.log("结果为: ", reOrderArray(array));
// 原地
function reOrderArray2(array) {
let index = 0; // 记录放奇数的位置,因为奇数要放到前面
for (let i = 0; i < array.length; i++) {
let cur = array[i];
// 如果是奇数
if (cur % 2 == 1) {
// 移动他前面的所有偶数 —— 移到放奇数的位置 index
for (let j = i - 1; j >= index; j--) {
array[j + 1] = array[j];
}
array[index] = cur;
index++;
}
}
return array;
}
console.log("结果为: ", reOrderArray2(array));
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65