Страницы

Поиск по вопросам

понедельник, 18 марта 2019 г.

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; }


Ответ

Код в вопросе мягко говоря не оптимален, но его можно "исправить" )
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; }

Комментариев нет:

Отправить комментарий