Генерация перестановок заданного массива в отсортированном порядке в Javascript

#javascript #arrays #sorting #recursion #permutation

#язык JavaScript #массивы #сортировка #рекурсия #перестановка

Вопрос:

Учитывая набор чисел, верните все возможные перестановки. Выведите перестановки чисел в новой строке через пробел, также убедитесь, что перестановки напечатаны в отсортированном порядке, то есть «1 2 3» должно стоять перед «2 3 1». Пример:

 1 2 3  1 3 2  2 1 3  2 3 1  3 1 2  3 2 1  

Я решил эту проблему с помощью рекурсии, и все работает нормально, за исключением последних двух выходных данных… 3 2 1 идет до 3 1 2 , и я перепробовал все, но не могу понять, как это сделать. Раньше я думал, что это можно сделать с помощью встроенного метода localeCompare (), но я не смог его использовать, кроме того, в этом много проблем (сначала преобразовать массив в строку, затем использовать этот метод, а затем снова преобразовать обратно в массив). Код приведен ниже. Пожалуйста, помогите мне. Заранее спасибо.

 function genPermut(arr, curr) {  if (curr === arr.length) {  console.log(arr);  return;  }  for (let i = curr; i lt; arr.length; i  ) {  swap(arr, i, curr);  genPermut(arr, curr   1);  swap(arr, i, curr);  } }  function swap(arr, x, y) {  let temp = arr[x];  arr[x] = arr[y];  arr[y] = temp;  return (arr[x], arr[y]); } genPermut([1, 2, 3], 0); 

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

1. Пожалуйста, покажите нам код, чтобы мы могли вам помочь.

2. @WaisKamal, пожалуйста, взгляните сейчас

3. это домашнее задание?

4. Именно это и делает этот алгоритм. На последней итерации вызова функции верхнего уровня первый своп поменяет первое значение на последнее значение в массиве, что приведет к [3, 2, 1], а затем все остальное просто следует из этого. Вам понадобится другой алгоритм.

5. Кроме того, вы должны учитывать, что происходит, когда входной массив изначально не отсортирован, и вам придется иметь дело с повторяющимися значениями в этом массиве (если не указано, что они будут уникальными): замена двух одинаковых значений приведет к выводу одной и той же перестановки, что вам не нужно.