架构爱好者
学习交流中心

数字数组奇偶排序问题

一、问题

将数组中奇数放在右边,偶数放在左边,不允许使用额外空间

说明:从一个数组中间删除元素splice的运行代价是比较大的

二、答案

var arr = [1, 4, 5, 2, 3, 7, 8]
arr.sort(function (a, b) {
  return a % 2 !== 0
})

三、其他方案

下面的讨论暂时不考虑空间复杂度。

3.1、sort类似方案

arr.sort((a) => -a % 2)

3.2、filter方案

arr.filter((item) => item % 2 === 1).concat(arr.filter((item) => item % 2 === 0)

3.3、reduce方案

arr.reduce((prev, curr) => curr % 2 === 0 ? [...prev, curr] : [curr, ...prev], [])

3.4、sort加排序方案

arr.sort((a, b) => (a % 2 === 1 ? a / 9999999 : a) - (b % 2 === 1 ? b / 9999999 : b))

四、参考资料

  1. 数字数组奇排序问题
未经允许不得转载:技术杂烩 » 数字数组奇偶排序问题