Как отсортировать массив, начиная с середины? - PullRequest
1 голос
/ 28 мая 2019

Учитывая, что у меня есть такой массив [..., 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);

То, что я сделал, работает правильно, но я хотел бы знать, есть ли лучший или более эффективный способ сделать это?

Ответы [ 2 ]

6 голосов
/ 28 мая 2019

Вы можете взять сводное значение 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
1 голос
/ 28 мая 2019

Вы можете сделать это в следующих шагах:

  • Создать пустой массив для результата.
  • Запустить цикл. Инициализируйте i до половины длины.
  • Зацикливание в обратном направлении означает уменьшение i на 1 каждый цикл.
  • push() элемент с текущим индексом для массива результатов первым и другое соответствующее значение для массива.

function sortFromMid(arr){
  let res = [];
  for(let i = Math.ceil(arr.length/2);i>=0;i--){
    res.push(arr[i]);
    res.push(arr[arr.length - i + 1])
  }
  return res.filter(x => x !== undefined);
}

console.log(sortFromMid([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]))

[5, 6, 4, 7, 3, 8, 2, 9, 1, 0]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...