Как получить массив после n-й итерации в пузырьковой сортировке? - PullRequest
0 голосов
/ 29 октября 2018

Вот алгоритм пузырьковой сортировки в javascript (удалена swap функция для краткости)

const bubbleSort = (arr, iter) => {
  for (let i = 0; i < arr.length - 1; i++) {
    for (let j = 0; j < arr.length - i - 1; j++) {
      if (arr[j] > arr[j + 1]) {
        swap(arr, j, j + 1);
      }
    }
  }
  return arr;
};

Второй аргумент iter представляет итерацию. Я хочу, чтобы этот метод возвращал массив после iter числа итераций. Например, рассмотрим этот массив

array = [3, 5, 8, 4, 1, 9, -2]

After iteration 1: array = [3, 5, 4, 1, 8, -2, 9]  
After iteration 2: array = [3, 4, 1, 5, -2, 8, 9]  
.  
.  
After iteration 5: array = [1, -2, 3, 4, 5, 8, 9]  
After iteration 6: array = [-2, 1, 3, 4, 5, 8, 9]

Так что, по сути, если я позвоню bubblesort(array, 5), он должен вернуть [1, -2, 3, 4, 5, 8, 9]

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Вы можете использовать цикл for и цикл forEach внутри, чтобы поменять местами элементы.

let array = [3, 5, 8, 4, 1, 9, -2]

function bubblesort(arr, n) {
  for (let x = 0; x < n; x++) {
    arr.forEach((e, i) => {
      if (arr[i + 1] < e) {
        arr[i] = arr[i + 1]
        arr[i + 1] = e
      }
    })
  }
  return arr
}

console.log(bubblesort(array, 5))
0 голосов
/ 29 октября 2018

Если вам нужна N-я итерация, просто выполните все это N раз, а затем верните результат?

var array = [3, 5, 8, 4, 1, 9, -2]

const bubbleSort = (arr, iter) => {
  for (var n = 0; n < iter; n++) {
    for (var i = 0; i < arr.length; i++) {
      for (var j = 1; j < arr.length; j++) {
        if (arr[j - 1] > arr[j]) {
          swap(arr, j - 1, j);
        }
      }
    }
  }
  return arr;
};

bubbleSort(array,5)
...