Не работает алгоритм?

98
31 мая 2021, 12:40

делаю алгоритм сортировки на джаваскрипт. Работает на другом алгоритме - поиска наименьшего числа. Скрипт должен выводить массив от наименьшего до наибольшего числа но выводит наименьшее число подряд.

function find_smallest(arr) { 
  var smallest = arr[0]; 
  var smallest_index = 0; 
  for (var i = 1; i < arr.length; i++) { 
    if (arr[i] < smallest) { 
      smallest = arr[i]; 
      smallest_index = i; 
    } 
  } 
   
  return smallest; 
} 
 
function selection_sort(new_arr) { 
  new_arr_2 = []; 
  for (var n = 0; n < new_arr.length; n++) { 
    new_arr_2.push(find_smallest(new_arr)); 
  } 
   
  return new_arr_2; 
} 
 
console.log(selection_sort([90, 3, 5, 8, 90, 14, 90009]))

Answer 1

Причина такого поведения в том, что на каждом шаге выполняется одно и то же - поиск минимального элемента в одном и тоже, не изменяющемся массиве new_arr

Для исправления нужно исключать найденный минимум из следующего поиска. Это можно сделать, например, удаляя соответствующий элемент (splice).

А можно выполнять поиск, начиная с n-го элемента на n-м шаге, и переставив минимум в начало (поменяв его с n-м). В результате второй массив не понадобится, и получится классическая сортировка выбором.

Answer 2

В JS есть встроенная сортировка массивов, ничего выдумывать не нужно, это простейшая операция:

var numbers = [4, 2, 5, 1, 3];
numbers.sort(function(a, b) {
  return a - b;
});
console.log(numbers); // [1, 2, 3, 4, 5]

https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

READ ALSO
Методы жизненного цикла React

Методы жизненного цикла React

Какие на данный момент можно использовать методы жизненного цикла в React? В интернете только устаревшая информация а в офдокументации расписано...

83
Как определить на каком мониторе находится окно, и как открыть его на другом?

Как определить на каком мониторе находится окно, и как открыть его на другом?

Открываю окно через windowopen(url, name, params), при закрытии запоминаю размеры и положение, при повторном открытии размещаю окно по сохраненным координатам...

194
Ошибка отрисовки в cavnas

Ошибка отрисовки в cavnas

Пытаюсь анимировать пулю,плавно вылетающую при клике на пробелНо с отрисовкой что-то не так

107