javascript - 如何从中间开始对数组进行排序?

标签 javascript arrays sorting pivot

考虑到,我有一个像这样的数组 [..., n-2, n-1, n, n+1, n+2, ...]。我想以这种方式对它进行排序 [n, n+1, n-1, n+2, n-2,...] n 等于我数组的中间。

例如:

输入:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

输出:

[5, 6, 4, 7, 3, 8, 2, 9, 1, 0]

let arrayNotSorted = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
let positionMiddleArray = Math.trunc(arrayNotSorted.length / 2);

let arraySorted = [arrayNotSorted[positionMiddleArray]];

for(let i=1; i <= positionMiddleArray; i++){
 if(arrayNotSorted[positionMiddleArray + i] !== undefined){
		arraySorted.push(arrayNotSorted[positionMiddleArray + i]);
  }
  if(arrayNotSorted[positionMiddleArray - i] !== undefined){
  	arraySorted.push(arrayNotSorted[positionMiddleArray - i]);
  }
}

console.log('Not_Sorted', arrayNotSorted);
console.log('Sorted', arraySorted);

我所做的工作正常,但我想知道是否有更好的方法或更有效的方法?

最佳答案

您可以取一个枢轴值 5 并按该值的绝对增量排序,并且枢轴值对相同的增量进行降序排序。

var array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
    pivot = 5;

array.sort((a, b) => Math.abs(a - pivot) - Math.abs(b - pivot) || b - a);

console.log(...array); // 5 6 4 7 3 8 2 9 1 0

关于javascript - 如何从中间开始对数组进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56342252/

相关文章:

javascript - TypeScript 和无服务器 : `this` Undefined When Calling Private Methods from Public Methods

javascript - 使用带快照的 ESLint 进行静态分析

c - 指向包含数组的结构的指针

c - 仅使用一个函数(段错误)对链表进行归并排序

c++ - 使用 O(m) 空间在 O(n) 时间内对 vector <int>(n) 进行排序?

widget - 在表单 <select> 元素中,如何使用 onchange 事件处理程序直接链接到所选选项?

javascript - 从javascript中的onclick事件获取值时出错?

java - 对 Jersey 客户端的 POST 请求无法解码包含空数组的 JSON 对象?

java - 如何使用 fill() 方法填充 Java 中特定对象的多维数组?

java - Arrays.Sort 到底是如何工作的?