# 题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
# 测试用例
用例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