Отберите нечётные числа, отсортируйте их по возрастанию и подставьте обратно только на нечётные позиции по значению. Чётные элементы останутся на своих местах.
Сортировка лишь нечётных элементов массива
Отберите нечётные числа, отсортируйте их по возрастанию и подставьте обратно только на нечётные позиции по значению. Чётные элементы останутся на своих местах.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Необходимо написать функцию sortOdd, которая упорядочит все нечётные числа в переданном массиве по возрастанию, не меняя при этом позиции чётных чисел.
function sortOdd(array) {
return;
}
console.log(sortOdd([7, 1])); // [1, 7]
console.log(sortOdd([5, 8, 6, 3, 4, 41])); // [3, 8, 6, 5, 4, 41]
console.log(sortOdd([9, 8, 7, 6, 5, 4, 3, 2, 1, 0])); // [1, 8, 3, 6, 5, 4, 7, 2, 9, 0]
Ответ
Отберите нечётные числа, отсортируйте их по возрастанию и подставьте обратно только на нечётные позиции по значению. Чётные элементы останутся на своих местах.
function sortOdd(array) {
const odd = array.filter(value => value % 2 !== 0).sort((a, b) => a - b);
let index = 0;
return array.map(value => value % 2 !== 0 ? odd[index++] : value);
}
Условие % 2 !== 0 работает и для отрицательных нечётных чисел, в отличие от сравнения с 1. Исходный массив не меняется: sort вызывается на результате filter. Для k нечётных элементов время O(n + k log k), память O(n + k) с учётом результата.