Перевести код для сортировки пузырей VisuAlgo на Javascript - PullRequest
0 голосов
/ 20 января 2019

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

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

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

Спасибо!

Код VisuAlgo (https://visualgo.net/en/sorting):

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.log(startArray);
        i++;
      } else {
      swapped = false;
      }
    }
    }
  while (swapped);
  console.log(startArray);

Ответы [ 2 ]

0 голосов
/ 20 января 2019

Итоговый код:

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.log(startArray);
        i = 0;
      } else {
      swapped = false;
      }
    }
    }
  while (swapped);
  console.log(startArray);
0 голосов
/ 20 января 2019

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

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

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

А если у вас большие массивы, предпочитайте сортировку вставками, а не сортировку по пузырькам. Как правило, он быстрее и его легко реализовать.

...