# 题目描述

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。

# 测试用例

用例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