Bubblesort в JavaScript не может работать? - PullRequest
2 голосов
/ 04 мая 2019

Подскажите, пожалуйста, что не так с этой реализацией алгоритма пузырьковой сортировки в JavaScript?

function bubbleSort(arr) {
  var swapped;
  do {
    swapped = false;
    for (var i = 0; i < arr.length - 1; i++) {
      if (arr[i] > arr[i + 1]) {
        var temp = arr[i];
        arr[i] = arr[i + 1];
        arr[i + 1] = temp;
        swapped = true;
      }
    }
  } while (swapped)
}


console.log(bubbleSort([4, 25, 1, 6, 2])); // [ 1, 2, 4, 6, 25 ]
console.log(bubbleSort([13, 1, 9, 38, 8, 3, 1])); // [ 1, 2, 4, 6, 25 ]

1 Ответ

1 голос
/ 04 мая 2019

Ваша функция вернет undefined. Вам нужно вернуть arr из функции.

Если вы не хотите изменять исходный массив, скопируйте исходный массив, используя slice().В приведенном ниже случае это не имеет значения, поскольку массивы не хранятся ни в одной переменной.

function bubbleSort(arr) {
  arr = arr.slice()
  var swapped;
  do {
    swapped = false;
    for (var i = 0; i < arr.length - 1; i++) {
      if (arr[i] > arr[i + 1]) {
        var temp = arr[i];
        arr[i] = arr[i + 1];
        arr[i + 1] = temp;
        swapped = true;
      }
    }
  } while (swapped)
  
  return arr;
}


console.log(bubbleSort([4, 25, 1, 6, 2])); // [ 1, 2, 4, 6, 25 ]
console.log(bubbleSort([13, 1, 9, 38, 8, 3, 1])); // [ 1, 2, 4, 6, 25 ]
...