Перевести код пузырьковой сортировки VisuAlgo на Javascript

начиная с алгоритма SORTING, который я нашел на этом сайте (это действительно круто, он позволяет вам визуализировать алгоритмы во время их работы ..), я хотел перевести их код [и я не уверен, на каком языке ..] на Javascript и примените его к массиву чисел для сортировки.

После многих попыток я все еще не разобрался, и мой код не предоставляет отсортированный массив.

  • 1) Любое предложение о том, как это исправить?
  • 2) Я вижу, что код VisuAlgo использует оператор if, внутри цикла for, внутри цикла do-while... возможно ли это в Javascript? Мне кажется, что оператор if else в do while (см. мой фактический код) может заменить for.

Спасибо!

Код VisuAlgo (https://visualgo.net/ru/сортировка):

do

  swapped = false

  for i = 1 to indexOfLastUnsortedElement-1

    if leftElement > rightElement

      swap(leftElement, rightElement)

      swapped = true

while swapped

Мой код:

  function swap(element1, element2) {
    var t = element1;
    element1 = element2;
    element2 = t;
    return [element1, element2];
  };

  var startArray = [2, 1, 0, 5, 1];
  var swapped = true;

  do {
      for (i = 0; i < startArray.length; i++) {
        if (startArray[i] > startArray[i+1]) {
        swap(startArray[i], (startArray[i]+1));
        console.info(startArray);
        i++;
      } else {
      swapped = false;
      }
    }
    }
  while (swapped);
  console.info(startArray);
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
258
2

Ответы 2

Есть пара проблем с вашим кодом.

    swap(startArray[i], (startArray[i]+1));

очевидно неверно. Вы, вероятно, имели в виду

    swap(startArray[i], startArray[i+1]);

Но я не понимаю, как использовать ваш код подкачки. Что вы делаете со значениями, которые возвращает эта функция?

Вероятно, лучший код был бы

 [startArray[i], startArray[i+1]] = swap(startArray[i],startArray[i+1]));

Вы также можете сделать то же самое более компактным способом.

startArray[i]=[startArray[i+1], startArray[i+1]= startArray[i]][0];

Я не тестировал код, но он должен работать.

И если ваши массивы большие, предпочтите сортировку вставками, а не пузырьковую сортировку. Как правило, это быстрее и проще в реализации.

спасибо @Ален Мериго; добавил 2 упомянутых вами изменения, результат улучшился, но все же я получил только частичную сортировку. Я снял i = 1 в цикле for и изменил его на i = 0, и все сработало правильно. Я включил окончательный код ниже для будущих читателей.

user3926863 20.01.2019 18:41

Окончательный код:

function swap(element1, element2) {
    var t = element1;
    element1 = element2;
    element2 = t;
    return [element1, element2];
  };

  var startArray = [2, 1, 9, 5, 1, 4,7, 457, 653, 43, 3];
  var swapped = true;

  do {
      for (i = 0; i < startArray.length; i++) {
        if (startArray[i] > startArray[i+1]) {
        [startArray[i], startArray[i+1]] = swap(startArray[i],startArray[i+1]);
        console.info(startArray);
        i = 0;
      } else {
      swapped = false;
      }
    }
    }
  while (swapped);
  console.info(startArray);

Другие вопросы по теме