#javascript #сортировка #функции #циклы
Есть недоделанная функция сортировки, которая должна находить минимальный элемент массива и засовывать его в новый массив. Так как я не знаю, как удалить предыдущий минимальный эллемент, функция выдает массив из одного самого минимального числа из данного ей массива(например [44, 5, 2, 6, 3] она выдает [2, 2, 2, 2, 2], вместо [2, 3, 5, 6, 44]) Мне нужно дополнить/подправить код ниже, а не новый или сокращенный вариант. Я хочу понять, как это работает через функции и циклы, сколько только я разных способов не перепробовал - все напрасно: function sort(arr) { var sorted = []; var min = Infinity; for (j = 0; j < arr.length; j++) { for (var i = 0; i < arr.length; i++) { if (arr[i] < min ) { min = arr[i]; } } sorted.push(min); } return sorted; }
Ответы
Ответ 1
Код в вопросе мягко говоря не оптимален, но его можно "исправить" ) function sort(arr) { var sorted = []; var min = Infinity; var minIndex = Infinity; for (j = 0; j < arr.length; j++) { for (var i = 0; i < arr.length; i++) { if (arr[i] < min ) { min = arr[i]; minIndex = i;// нужен предполагаемый индекс минимума кроме самого минимума, чтобы убрать его из исходного массива } } arr[minIndex] = Infinity;// исходный массив надо поправить, в нем нет больше "найденного минимального элемента, поставим бесконечность, чтобы была больше любого" sorted.push(min); min = Infinity;// надо сбрасывать минимум, иначе в следующей итерации не найдем ничего меньше, либо инициализиировать переменную внутри первого for } return sorted; }Ответ 2
var mins = []; //сюда будем записывать минимумы //массив массивов var arr = [ [10, 1, 5, 3, 6], [65, 21, 45, 32, 16], [300, 20, 25, 78, 6015], ]; var absMin = arr[0][0]; //мимимум по всем строкам for (var i = 0; i < arr.length; i++) { var row = arr[i]; //поиск минимума в строке var min = row[0]; for (var j = 0; j < row.length; j++) { var num = row[j]; if (num < min) min = num; if (num < absMin) absMin = num; } mins.push(min); } document.write('Минимальные элементы в каждой строке:
[' + mins.join(', ') + ']'); document.write('
'); document.write('Абсолютный мимимум:
' + absMin); Демонстрация работы тут https://codepen.io/lukas-pierce/pen/MJdmWmОтвет 3
Сразу не понял постановку задачи: var nums = [44, 5, 2, 6, 3]; nums.sort(function(a, b){ return a - b; }); document.write('[' + nums.join(', ') + ']'); рабочий пример тут https://codepen.io/lukas-pierce/pen/jyomyBОтвет 4
Так что ли? console.info([44, 5, 2, 6, 3].sort((a, b) => a > b)); Не надо создавать велосипед в данном случае. Будет тормозить (относительно нативной реализации) и поддерживать сложно. Но всё же: let arr = [44, 5, 2, 6, 3]; const sort = a => { let len = a.length - 1; // Проход каждому элементу for(let i = 0; i < len; i++) // Проводим элемент по массиву for(var e = 0; e < len - i; e++) // Если элемент больше следующего if(a[e] > a[e + 1]) // То флипаем его (меняем местами) [a[e], a[e + 1]] = [a[e + 1], a[e]]; return a; }; console.info(sort(arr));Ответ 5
Результат
Ссылка на рабочий пример https://codepen.io/lukas-pierce/pen/EZzEEx
Комментариев нет:
Отправить комментарий