Javascript - ручная сортировка

374
19 февраля 2017, 11:19

Есть недоделанная функция сортировки, которая должна находить минимальный элемент массива и засовывать его в новый массив. Так как я не знаю, как удалить предыдущий минимальный эллемент, функция выдает массив из одного самого минимального числа из данного ей массива(например [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;
}
Answer 1
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('Минимальные элементы в каждой строке:<br> [' + mins.join(', ') + ']');
document.write('<hr>');
document.write('Абсолютный мимимум:<br>' + absMin);

Демонстрация работы тут https://codepen.io/lukas-pierce/pen/MJdmWm

Answer 2

Сразу не понял постановку задачи:

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

Answer 3

Так что ли?

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

Answer 4
<textarea rows="5" name="source" placeholder="Введите элементы массива через запятую">44, 5, 2, 6, 3</textarea>
<br>
<button name="do_sort">Выполнить сортировку</button>
<br>
<br>
<h2>Результат</h2>
<textarea rows="5" name="result"></textarea>
<script>
  var btn = document.querySelector('button[name="do_sort"]'),
    source = document.querySelector('textarea[name="source"]'),
    result = document.querySelector('textarea[name="result"]');
  btn.onclick = function() {
    try {
      var arr = JSON.parse("[" + source.value + "]");
      result.value = BubbleSort(arr).join(', ');
    } catch (e) {
      alert("Ошибка в исходных данных");
    }
  };
  /** сортировка методом пузырька
   * @param A - массив, который нужно отсортировать по возрастанию
   */
  function BubbleSort(A) {
    var n = A.length;
    for (var i = 0; i < n - 1; i++) {
      for (var j = 0; j < n - 1 - i; j++) {
        if (A[j + 1] < A[j]) {
          var t = A[j + 1];
          A[j + 1] = A[j];
          A[j] = t;
        }
      }
    }
    return A; // На выходе сортированный по возрастанию массив A.
  }
</script>

Ссылка на рабочий пример https://codepen.io/lukas-pierce/pen/EZzEEx

READ ALSO
Неправильно работает директива

Неправильно работает директива

Есть директива, суть которой скрывать элемент если юзер это ресторанТак вот, это работает только тогда когда в дочернем блоке нету ng-show, т

394
При загрузке страницы на сервер не отображается элемент (png)

При загрузке страницы на сервер не отображается элемент (png)

Приветствую! Дело в том, что в live preview, или если просто забросить html в браузер, все отображается нормально, но вот я загрузил страницу на сервер...

266