Есть недоделанная функция сортировки, которая должна находить минимальный элемент массива и засовывать его в новый массив. Так как я не знаю, как удалить предыдущий минимальный эллемент, функция выдает массив из одного самого минимального числа из данного ей массива(например [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;
}
Ответ
Код в вопросе мягко говоря не оптимален, но его можно "исправить" )
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;
}
Комментариев нет:
Отправить комментарий